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)
有人可以向我解释为什么会这样吗?以及如何解决?有没有我可以通过的选项?
编辑:我还发现##(连接运算符)也不起作用!
我发现运行预处理器c++并不能解决cpp我的两个问题:
c++ -E -P Source/Input.h Generated/Output.h
Run Code Online (Sandbox Code Playgroud)
-x c++顺便说一句:如果您的文件未使用常规的 c/c++ 扩展名来执行命令,则需要添加标志c++。cpp没有它就可以正常工作。
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |