我正在尝试一些尴尬的预处理,并想出了类似的东西:
#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:错误:'='标记之前的预期表达式
为什么?
答案 0 :(得分:15)
==
是一个令牌,它不能分成两半。您应该在代码上运行gcc -E
从GCC手册页:
-E
在预处理阶段后停止;不要正确运行编译器。输出是在 预处理源代码的形式,发送到标准输出。忽略不需要预处理的输入文件。
为您的代码gcc -E
提供以下输出
if(x= =6)
printf("X == 6\n");
if(y= =6)
printf("Y==6\n");
第二个=
是导致错误消息expected expression before ‘=’ token
答案 1 :(得分:5)
预处理器不在字符级别工作,它在令牌级别操作。因此,当它执行替换时,您将获得与以下内容相同的内容:
if (x = = 6)
而不是你想要的:
if (x==6)
此处有一些特定的例外情况,例如#
字符串化运算符。
答案 2 :(得分:4)
if(x=SIX)
被解析为
if (x= =6).
所以你得到了错误。
答案 3 :(得分:0)
您使用的是什么工具链?如果您使用的是GCC,则可以添加-save-temps
选项并检查test.i
中间结果以解决您的问题。
我怀疑你在x=
和=6
之间有空格。