Clang编译器错误:预处理器表达式开头的标记无效



在windows上使用clang编译器会在预处理器表达式的开头抛出"无效令牌">

#if __WORDSIZE == 64

/位/类型。h:42:16:错误:预处理器表达式开始时的无效令牌

为了确保定义了__WORDSIZE,我添加了

#define __WORDSIZE

如预期那样抛出警告CCD_ 1

预处理器表达式在技术上不完全是__WORDSIZE == 64;但是,它是由这些令牌生成的。在构建实际表达式之前,将扫描表达式中的标记;发生了宏观扩张。这就是重点;要检查定义的宏CCD_ 3是否为64。

如果在扫描过程中__WORDSIZE而不是展开的,则可以得到__WORDSIZE == 64作为表达式;在这种特殊情况下,在评估…之前,任何剩余的标识符都被视为0。。。这意味着您正在评估表达式0 == 64,这是错误的。

但在您的情况下,您定义了一个对象,如具有空替换列表的宏__WORDSIZE。因此,在扩展之后,您只需得到:== 64。第一个标记是./bits/wordsize.h:8:9: warning: '__WORDSIZE' macro redefined [-Wmacro-redefined]0,但它应该是一个二进制运算符。这是无效的;即您的invalid token at start of a preprocessor expression==

相关内容

最新更新