C++预处理器不按预期处理定义

Pau*_*kis 6 c++ macros preprocessor clang

我遇到了cpp预处理器的问题.我有这样的Input.h文件:

#ifndef PLATFORM_MOBILE1111
    #define MyTest WEB111
#endif 

int MyTest;
Run Code Online (Sandbox Code Playgroud)

我用这个命令处理它(在OSX上):

cpp -E -P Source/Input.h Generated/Output.h
Run Code Online (Sandbox Code Playgroud)

我明白了:

    #define MyTest WEB111


int MyTest;
Run Code Online (Sandbox Code Playgroud)

宏MyTest未被应用.为什么?


经过一系列的实验,我发现如果我在#ifndef行之后插入一个空行,变量定义,注释或任何其他行 - 那么它可以正常工作.

#ifndef PLATFORM_MOBILE1111

    #define MyTest WEB111
#endif 

int MyTest;
Run Code Online (Sandbox Code Playgroud)

所以上面的输入被正确处理成:

int WEB111;
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么会这样吗?以及如何解决?有没有我可以通过的选项?


编辑:我还发现##(连接运算符)也不起作用!

Pau*_*kis 1

我发现运行预处理器c++并不能解决cpp我的两个问题:

c++ -E -P Source/Input.h Generated/Output.h
Run Code Online (Sandbox Code Playgroud)

-x c++顺便说一句:如果您的文件未使用常规的 c/c++ 扩展名来执行命令,则需要添加标志c++cpp没有它就可以正常工作。