【发布时间】:2016-10-01 11:49:44
【问题描述】:
宏可以调用预处理器命令吗?
例如,我可以写类似的东西,
#define PreProcessor(x, y) #define x ((y)+1)
【问题讨论】:
-
不,你不能。
-
不能将#指令写在同一行。
宏可以调用预处理器命令吗?
例如,我可以写类似的东西,
#define PreProcessor(x, y) #define x ((y)+1)
【问题讨论】:
不可能将宏扩展为同时也是预处理器指令的东西,如 §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 */
涵盖该功能的大多数常见情况。
【讨论】: