我要做的是让C预处理器输出#ifdef、#else和#endif指令。也就是说,我想以某种方式“转义”一条指令,以便预处理器的输出包括该指令,从而使预处理器在输出上运行。
是否有可能“转义”CPP指令,使其由预处理器输出,从而如果CPP输出本身进行预处理,则转义指令的输出将成为预处理器指令?
发布于 2011-10-07 21:28:22
Marcelo Cantos's answer的一个小变体适用于我在GNU cpp 4.4.3上的工作:
#define HASH(x) x
...
HASH(#)ifdef __cplusplus
class foo { };
HASH(#)endif发布于 2011-10-07 21:05:53
EDIT:以下答案似乎只适用于早期版本的cpp。它介于4.2.1和4.3.2之间。gcc -E和g++ -E更早实现了收支平衡。有关详细信息,请参阅注释。
这里有一个看似有效的窍门:
#define HASH() #
...
HASH()ifdef __cplusplus
class foo { };
HASH()endif您必须直接使用cpp,因为编译器将尝试立即使用预处理器输出,而不知道如何处理未处理的指令。
https://stackoverflow.com/questions/7687634
复制相似问题