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