繁体   English   中英

定义=时的预处理程序错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM