Clang compiler error: invalid token at start of a preprocessor expression

Clang compiler error: invalid token at start of a preprocessor expression

在 windows 上使用 clang 编译器会抛出 "invalid token at start of a preprocessor expression"

#if __WORDSIZE == 64

./bits/types.h:42:16: 错误:预处理器表达式开头的无效标记

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

#define __WORDSIZE

如预期的那样抛出警告 ./bits/wordsize.h:8:9: warning: '__WORDSIZE' macro redefined [-Wmacro-redefined]

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

如果发现 __WORDSIZE 在这次扫描期间 没有 扩展,那么您将得到 __WORDSIZE == 64 作为表达式;在这种特殊情况下,任何剩余的标识符在评估之前都被视为 0...这意味着您正在评估表达式 0 == 64,这是错误的。

但在您的例子中,您定义了一个像宏 __WORDSIZE 这样的对象,替换列表为空。所以在扩展之后,你只是得到:== 64。第一个标记是 ==,但它应该是一个二元运算符。那是无效的;即,您的 invalid token at start of a preprocessor expression==