关于gcc:编译器错误“令牌前缺少二进制运算符”是什么意思? |
您所在的位置:网站首页 › 令牌错误是什么意思 › 关于gcc:编译器错误“令牌前缺少二进制运算符”是什么意思? |
尝试使用gcc进行编译时,最近出现以下错误: error: missing binary operator before token"(" Web和SO搜索提供了此错误的几个特定示例,并进行了特定的代码更改以修复它们。 但是我没有找到导致此错误的原因的一般描述。 gcc何时以及为什么会发出此错误? 这不是编译器错误,而是预处理器错误。当预处理器在尝试使用#if或#elif指令评估表达式时遇到无效语法时,会发生这种情况。 一个常见的原因是#if指令中的sizeof运算符: 例如: 123 #define NBITS (sizeof(TYPE)*8) //later #if (NBITS>16) //ERROR这是一个错误,因为sizeof是由编译器而不是前处理器评估的。 类型转换也不是有效的预处理器语法: 123 #define ALLBITS ((unsigned int) -1) //later #if (ALLBITS>0xFFFF) //ERROR有效表达式中的规则在此处。 另请注意,#if会将未定义的宏的值评估为0,除非看起来像接受参数一样,在这种情况下,您还会收到此错误: 因此,如果未定义THIS: 12345#if THIS == 0 //valid, true #if THIS > 0 //valid, false #if THIS() == 0 //invalid. ERROR您的#if语句中的错别字也会导致此消息。 相关讨论 错误消息的确令人误解,恕我直言,预处理器应针对实际发生的错误输出更有意义的消息。因此,Ive刚刚在GCC Bugzilla中报告了一个错误:错误87351-误导性错误消息:在标记"("之前缺少二进制运算符 这个答案与问题无关。它只是解释预处理器语法。 嗯,我既写了问题,也写了这个答案。问题是"此错误消息是什么意思"。答案是"其在条件中具有前处理器语法错误,这是导致该错误的一些常见语法示例"。我写这篇文章是因为当我尝试查找此错误消息的原因时,我发现的所有内容都是使错误消失的具体更改示例,但没有说明该消息的实际含义。随时改善答案,这就是编辑按钮的作用。如果您使用的是Linux,请确保您的项目文件中没有标题为features.h的标头。 我有一个用这个名字的人,结果是: /usr/include/x86_64-linux-gnu/bits/huge_val.h:25: error: function pointer expected 要么 /usr/include/bits/huge_val.h:26:18: error: missing binary operator before token "(" 这是因为某些系统标头(如huge_val.h)使用由/usr/include/features.h定义的宏(如__GNUC_PREREQ)(在此SO问题中了解有关此标头的更多信息)。 就我而言,当我开始使用gcc的-I选项时,我首先看到了此错误,该选项突然使gcc在默认系统包含目录之前选择了我的项目包含目录。 如果在编译器标志中包含-fno-operator-names,有时会出现此错误。我在构建json时遇到了确切的错误,此问题得以解决。 检查直接。没有空间,没有特别 经验值: add_subdirectory(主目录)-> add_subdirectory(主目录) 相关讨论 您的答案很难理解。 CMake与这有什么关系? 您可以检查您的文件夹名称。我已经通过这种方式解决了这个问题。 然后,我建议您a)添加更多上下文并解释您使用CMake的方式,b)为清晰起见,改进答案的语法和格式。 请参阅:crifan.com/ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |