[英]Is there a way to escape a C preprocessor directive?
我想做的是让C预处理器输出#ifdef
, #else
和#endif
指令。 也就是说,我想以某种方式“转义”指令,以便预处理器的输出包括在输出上运行的预处理器的指令。
是否可以“转义” CPP指令,以便由预处理程序输出它,以便如果CPP输出本身要经过预处理,则转义指令的输出将成为预处理程序指令?
Marcelo Cantos的答案的一个略微变体在GNU cpp 4.4.3上对我有效:
#define HASH(x) x
...
HASH(#)ifdef __cplusplus
class foo { };
HASH(#)endif
编辑:以下答案似乎仅适用于早期版本的cpp
。 它在4.2.1和4.3.2之间中断。 gcc -E
和g++ -E
甚至更早达到收支平衡。 有关详细信息,请参见评论。
这似乎有用的一个技巧:
#define HASH() #
...
HASH()ifdef __cplusplus
class foo { };
HASH()endif
您将必须直接使用cpp
,因为编译器将尝试立即使用预处理器输出,并且不知道如何处理未处理的指令。
似乎可行的另一个技巧是:
#define EMPTY
EMPTY#ifdef
使用GCC的预处理器(版本4.5.2),我得到:
#ifdef
由于某种原因,该技术与Ilmari Karonen的解决方案具有相同的领先空间问题,但是对于符合现代标准的C预处理程序来说,这可能不是问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.