【问题标题】:C program syntax "({statement;});" is reported as error by keilC 程序语法 "({statement;});"被keil报错
【发布时间】:2026-01-16 02:35:01
【问题描述】:

我正在尝试以格式定义宏

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

void main(void)
{
    unsigned int log_var;
    SUM(10,20);
}

通过 ARMCC 编译相同的内容会引发错误“预期表达式”,但使用 GCC 进行编译不会引发错误。

是 ARMCC 中不允许使用 ({<statements>}); 语法还是有其他原因?

删除括号后同样消失。即{<statements>}

【问题讨论】:

标签: c


【解决方案1】:

如果你想有一个多语句宏体,通常的方法是有一个迭代do while循环:

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

【讨论】:

  • 但他也可以只使用括号,不是吗?
  • @Mauren 如果 OP 在宏“调用”之后添加分号,这将导致空语句,而不是所有代码验证器都喜欢空语句。
  • 哦,我没注意到。