我最近尝试使用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)