我想知道为什么这样的代码在编译时会生成以下错误:
1.c:11:错误:在“else”之前需要表达式
代码:

#include <stdio.h>

#define xprintk(...)    while(0);


int main (void)
{
 if (1)
    xprintk("aaa\n");
 else
    xprintk("bbb\n");

 return 0;
}

最佳答案

 #define xprintk(...)    while(0)
                                ^^ Remove semi-colon

查看预处理后会发生什么
gcc -E test.c
int main (void)
{
 if (1)
    while(0);; //<- Two semi-colon (i.e. Two statements)
 else
    while(0);; //<- Two semi-colon

 return 0;
}

10-08 04:04