Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序语法;({语句;})&引用;keil将其报告为错误_C - Fatal编程技术网

C程序语法;({语句;})&引用;keil将其报告为错误

C程序语法;({语句;})&引用;keil将其报告为错误,c,C,我正在尝试以以下格式定义宏 #define SUM(x,y) ({log_var = x; log_var += y;}) void main(void) { unsigned int log_var; SUM(10,20); } 由ARMCC编译该表达式会抛出一个错误“应为表达式”,但使用GCC编译不会抛出该错误 是语法({})在ARMCC中是不允许的,或者有其他原因吗 删除括号后,相同的内容将消失。i、 e{}如果您想要一个多语句宏体,通常的方法是在循环时进行一次迭代do

我正在尝试以以下格式定义宏

#define SUM(x,y) ({log_var = x; log_var += y;})

void main(void)
{
    unsigned int log_var;
    SUM(10,20);
}
由ARMCC编译该表达式会抛出一个错误“应为表达式”,但使用GCC编译不会抛出该错误

是语法
({})在ARMCC中是不允许的,或者有其他原因吗


删除括号后,相同的内容将消失。i、 e
{}

如果您想要一个多语句宏体,通常的方法是在循环时进行一次迭代
do:

#define SUM(x,y) do {log_var = x; log_var += y;} while (0)

这是一个GCC扩展。但他也可以只使用括号,不是吗?@Mauren如果OP在宏“call”后添加分号,会导致空语句,并且不是所有代码验证程序都喜欢空语句。哦,我没有注意到这一点。