首页 新闻 会员 周边

关于C语言中宏定义会导致的逻辑问题

0
悬赏园豆:50 [已解决问题] 解决于 2023-11-01 17:13

以下是华为C语言编写规范中的一段话:

/引用开始/
示例:看下面的语句,,只有宏的第一条表达式被执行。

define FOO(x) \

printf("arg is %d\n", x);
do_something_useful(x);

为了说明问题,下面for语句的书写稍不符规范

for (blah = 1; blah < 10; blah++)
FOO(blah)

用大括号定义的方式可以解决上面的问题:

define FOO(x) { \

printf("arg is %s\n", x);
do_something_useful(x);
}

但是如果有人这样调用:

if (condition == 1)
FOO(10);
else
FOO(20);

那么这个宏还是不能正常使用。
/引用结束/
请问这里已经用大括号将宏值中的两行代码包括起来了,为什么这个宏还是不能使用呢,举个例子,以下两种代码应该是等同的吧,这么说的话宏不是已经被正常使用了吗?

define MY_MACRO { \

statement1; \
statement2; \
statement3; \

}
if(condition == 1)
MY_MACRO;

等同于
if(condition == 1){
statement1;
statement2;
statement3;
}

sansan_33的主页 sansan_33 | 初学一级 | 园豆:157
提问于:2023-11-01 11:33
< >
分享
最佳答案
0

将FOO(10); 最后的分号去掉试试

收获园豆:50
jiajinzhao | 菜鸟二级 |园豆:458 | 2023-11-01 13:20

好的,多谢大佬提醒!

sansan_33 | 园豆:157 (初学一级) | 2023-11-01 15:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册