宏可以调用预处理器命令吗?

时间:2016-10-01 11:49:45

标签: c macros

宏可以调用预处理器命令吗?

例如,我可以写一些像

这样的东西
#define PreProcessor(x, y)  #define x ((y)+1)

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 */

涵盖该功能的大部分常见案例。