首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法避开C预处理器指令?

问有没有办法避开C预处理器指令?
EN

Stack Overflow用户
提问于 2011-10-07 21:02:16
回答 2查看 3.1K关注 0票数 9

我要做的是让C预处理器输出#ifdef、#else和#endif指令。也就是说,我想以某种方式“转义”一条指令,以便预处理器的输出包括该指令,从而使预处理器在输出上运行。

是否有可能“转义”CPP指令,使其由预处理器输出,从而如果CPP输出本身进行预处理,则转义指令的输出将成为预处理器指令?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-07 21:28:22

Marcelo Cantos's answer的一个小变体适用于我在GNU cpp 4.4.3上的工作:

代码语言:javascript
复制
#define HASH(x) x

...

HASH(#)ifdef __cplusplus
class foo { };
HASH(#)endif
票数 10
EN

Stack Overflow用户

发布于 2011-10-07 21:05:53

EDIT:以下答案似乎只适用于早期版本的cpp。它介于4.2.1和4.3.2之间。gcc -E和g++ -E更早实现了收支平衡。有关详细信息,请参阅注释。

这里有一个看似有效的窍门:

代码语言:javascript
复制
#define HASH() #

...

HASH()ifdef __cplusplus
class foo { };
HASH()endif

您必须直接使用cpp,因为编译器将尝试立即使用预处理器输出,而不知道如何处理未处理的指令。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7687634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档