以下是华为C语言编写规范中的一段话:
/引用开始/
示例:看下面的语句,,只有宏的第一条表达式被执行。
printf("arg is %d\n", x);
do_something_useful(x);
为了说明问题,下面for语句的书写稍不符规范
for (blah = 1; blah < 10; blah++)
FOO(blah)
用大括号定义的方式可以解决上面的问题:
printf("arg is %s\n", x);
do_something_useful(x);
}
但是如果有人这样调用:
if (condition == 1)
FOO(10);
else
FOO(20);
那么这个宏还是不能正常使用。
/引用结束/
请问这里已经用大括号将宏值中的两行代码包括起来了,为什么这个宏还是不能使用呢,举个例子,以下两种代码应该是等同的吧,这么说的话宏不是已经被正常使用了吗?
statement1; \
statement2; \
statement3; \
}
if(condition == 1)
MY_MACRO;
等同于
if(condition == 1){
statement1;
statement2;
statement3;
}
将FOO(10); 最后的分号去掉试试
好的,多谢大佬提醒!