宏可以调用预处理器命令吗?
例如,我可以写一些像
这样的东西#define PreProcessor(x, y) #define x ((y)+1)
答案 0 :(得分:3)
无法将宏扩展为也是预处理程序指令的内容,如§6.10.3.4,3:
由此产生的完全宏替换的预处理标记序列 即使它类似于一个预处理指令,也不会被处理...
但是,有条件地定义宏本身是可能的:
#if CONDITION_A_IS_MET
#define x ((y)+1)
#else
#define x /*...some other definition*/
#endif
或使用X-macro:
#define PreProcessor(x) X(x, ((x) + 1))
/*...later*/
#define X(a, b) printf("%d, %d", a, b)
PreProcessor(5) /* Outputs 5, 6 */
涵盖该功能的大部分常见案例。