[英]Preprocessor error when defining =
我正在尝试一些尴尬的预处理,并得出类似这样的东西:
#include <stdio.h>
#define SIX =6
int main(void)
{
int x=6;
int y=2;
if(x=SIX)
printf("X == 6\n");
if(y=SIX)
printf("Y==6\n");
return 0;
}
gcc给了我错误:
test.c:在函数'main'中:
test.c:10:8:错误:在'='标记之前的预期表达式
test.c:12:8:错误:在'='标记之前的预期表达式
这是为什么?
==
是一个令牌,它不能分成两半。 你应该在你的代码上运行gcc -E
从GCC手册页:
-E
在预处理阶段后停止; 不要正确运行编译器。 输出采用预处理源代码的形式,发送到标准输出。忽略不需要预处理的输入文件。
对于您的代码, gcc -E
给出以下输出
if(x= =6)
printf("X == 6\n");
if(y= =6)
printf("Y==6\n");
第二个=
导致错误消息expected expression before '=' token
原因
预处理器不在字符级别工作,它在令牌级别操作。 所以当它执行替换时,你得到的东西相当于:
if (x = = 6)
而不是你想要的:
if (x==6)
有一些具体的例外情况,如#
字符串化操作。
if(x=SIX)
被解析为
if (x= =6).
所以你得到了错误。
你用的是什么工具链? 如果您正在使用GCC,则可以添加-save-temps
选项并检查test.i
中间结果以解决您的问题。
我怀疑你在x=
和=6
之间有一个空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.