C 在'之前的预期表达式;宏中的{';标记

C 在'之前的预期表达式;宏中的{';标记,c,C,我已经研究了这个问题可能是什么,但我没有找到任何好的解释 我必须编写一个宏,返回一个mod 2的数字,但我总是得到一个错误:对于调用宏的每一行,在“{”标记之前都应该有一个表达式 我当前的标题如下: #define MOD2(number) \ { \ return (number) % 2; \ } 以及主要代码: int main(){ int number = 255; printf("

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

我必须编写一个宏,返回一个mod 2的数字,但我总是得到一个错误:对于调用宏的每一行,在“{”标记之前都应该有一个表达式 我当前的标题如下:

#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));
}

有人能解释一下问题出在哪里吗?

您试图将宏定义为函数,而不是函数。宏执行直接令牌替换,因此:

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)

您正试图将宏定义为函数,而不是函数。宏执行直接标记替换,因此:

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)

问题是,您的宏将

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


这显然是错误的。

问题是您的宏将

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


这显然是错误的。

使用
更改定义#定义MOD2(编号)(编号)%2
使用
更改定义#定义MOD2(编号)(编号)%2
Ahhh.好的,非常感谢:D@5T0RMBR34K3R很高兴我能帮上忙。如果您觉得有用,请随时联系。啊哈。好的,非常感谢您:D@5T0RMBR34K3R很高兴我能帮上忙。如果你觉得有用的话,请随时联系。