繁体   English   中英

有没有办法摆脱C预处理程序指令?

[英]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 -Eg++ -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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM