编译器错误"missing binary operator before token"是什么意思?



我最近尝试使用GCC编译时会出现以下错误:

错误:doken之前缺少二进制操作员"("

Web,因此搜索提出了此错误的几个特定示例,并进行了特定的代码更改以修复它们。但是我没有发现什么条件导致发出此错误的一般描述。

何时以及为什么发出此错误?

这不是编译器错误,而是预处理器错误。当预处理程序在试图评估#if#elif指令中的表达式时遇到无效的语法时,就会发生这种情况。

一个常见原因是#if指令中的sizeof操作员:

例如:

  #define NBITS (sizeof(TYPE)*8)
  //later
  #if (NBITS>16)    //ERROR

这是一个错误,因为sizeof是由编译器而不是预批量处理器评估的。

类型铸件也不是有效的预处理器语法:

  #define ALLBITS ((unsigned int) -1)
  //later
  #if (ALLBITS>0xFFFF)    //ERROR

在这里有效表达式中可以使用的规则。

还请注意,#if将评估一个未定义的宏为0,除非它看起来像是参数,在这种情况下,您也会遇到此错误:

因此,如果THIS未定义:

#if THIS == 0  //valid, true
#if THIS > 0 //valid, false
#if THIS() == 0  //invalid. ERROR

#if语句中的错字也可能导致此消息。

如果您在Linux上,请确保您在项目文件中没有名为features.h的标头。我有一个名称,结果是:

/usr/include/x86_64-linux-gnu/bits/huge_val.h:25:错误:功能指针预期

/usr/include/bits/huge_val.h:26:18:错误:令牌之前缺少二进制操作员 "("

这是因为像huge_val.h这样的某些系统标题使用/usr/include/features.h定义的 __GNUC_PREREQ之类的宏(在此问题中了解有关此标头的更多信息)。

在我的情况下,当我开始使用GCC的-I选项时,我首先看到了此错误,该选项突然使gcc选择我的项目Incluce inction inderiondory 默认系统包括目录。

如果编译器标志中有-fno-operator-names,有时会遇到此错误。我在构建json时遭受了确切的错误,并解决了它。

检查直接。没有空间,没有特别的空间经验:add_subDirectory(main) - > add_subdirectory(main)

相关内容

最新更新