code预处理过程中,默认后面会加一个结束用的分号。加do while 0 可以确保宏为单行命令
-
查看code宏预处理后的结果
gcc -E ./test.c -o my_pre.log
cat my_pre.log
-
错误用法
#include <iostream>
#define WHILE_ZERO(x) { \
printf("x is %s",x); \
printf("x is %s",x); \
}
int main() {
if (true)
WHILE_ZERO("COLIN");
else
{
}
return 0;
}
预处理后:
int main() {
if (true)
{ printf("x is %s","COLIN"); printf("x is %s","COLIN"); };
else
{
}
return 0;
}
-
正确用法
#include <iostream>
#define WHILE_ZERO(x) do{ \
printf("x is %s",x); \
printf("x is %s",x); \
} while(0)
int main() {
if (true)
WHILE_ZERO("COLIN");
else
{
}
return 0;
}
预处理后:
int main() {
if (true)
do{ printf("x is %s","COLIN"); printf("x is %s","COLIN"); }while(0);
else
{
}
return 0;
}