【问题标题】:Can a macro call a preprocessor command?宏可以调用预处理器命令吗?
【发布时间】:2016-10-01 11:49:44
【问题描述】:

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

例如,我可以写类似的东西,

#define PreProcessor(x, y)  #define x ((y)+1)

【问题讨论】:

标签: c macros


【解决方案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 */

涵盖该功能的大多数常见情况。

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 2021-12-29
    • 2010-09-23
    • 2011-05-31
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多