【问题标题】:Expected expression before '{' token in Macro宏中“{”标记之前的预期表达式
【发布时间】:2020-12-30 14:15:49
【问题描述】:

我已经研究了问题可能是什么,但我没有找到任何好的解释。

我必须编写一个返回数字 mod 2 的宏,但对于我调用宏的每一行,我总是在 '{' 标记之前得到错误:预期表达式 我现在的Header如下:

#define MOD2(number)       \
    {                    \
        return (number) % 2; \
    }

和主要代码:

int main(){
   int number = 255;
   printf("%d mod 2 ist %d.\n", number, MOD2(number));
   printf("%d mod 2 ist %d.\n", number, MOD2(number + 1));
   printf("%d mod 2 ist %d.\n", number, MOD2(number + 2));
   printf("%d mod 2 ist %d.\n", number, MOD2(number + 3));
}

谁能解释一下问题出在哪里?

【问题讨论】:

  • 用#define MOD2(number) (number) % 2改变定义

标签: c


【解决方案1】:

您正试图将宏定义为一个函数,但事实并非如此。宏会直接进行标记替换,所以:

printf("%d mod 2 ist %d.\n", number, MOD2(number));

翻译成:

printf("%d mod 2 ist %d.\n", number, { return (number) % 2; });

这是无效的语法。你反而想要:

#define MOD2(number) ((number) % 2)

【讨论】:

  • 啊。好的,非常感谢:D
  • @5T0RMBR34K3R 很高兴我能帮上忙。如果您觉得有用,请随时 accept this answer。
【解决方案2】:

问题是你的宏会转

printf("%d mod 2 ist %d.\n", number, MOD2(number));

进入

printf("%d mod 2 ist %d.\n", number, {return (number) % 2;});

这显然是错误的。

【讨论】:

    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多