根据预处理器条件生成宏

Macro generation depending on preprocessor conditionals

本文关键字:条件 处理器 预处理      更新时间:2023-10-16

我有一个类似于下面的情况,我在一个表中有一个带有宏的条目:

#define FOR_MY_TYPES(apply) 
  apply(a, b, c) 
  apply(d, e, f) 
  ....

我也有一些预处理条件:

#define CONDITION1 1
#define CONDITION2 0

我希望表中的一些条目根据这些条件添加,就像这样:

#define FOR_MY_TYPES(apply) 
    apply(a, b, c) 
    #if CONDITION1 || CONDITION2
    apply(x, y, z)
    #endif

实现这一目标的最佳方法是保持一个宏定义,并且,如果可能的话,避免根据条件重复条目。我想避免这个:

#if CONDITION1
#define FOR_MY_TYPES(apply) 
   ....Full table here...
#endif
#if CONDITION2
#define FOR_MY_TYPES(apply) 
//Full table again + CONDITION2 types
#endif
#if CONDITION1 || CONDITION2
#define FOR_MY_TYPES(apply) 
//Full table again + CONDITION1 || CONDITION2 types
#endif

我的问题是有相当多的组合,所以我应该尽量避免重复。它也更容易出错。

一种可能的方法:

#if CONDITION1 || CONDITION2
#define really_apply(x) x
#else
#define really_apply(x)
#endif
#define FOR_MY_TYPES(apply) 
    apply(a, b, c) 
    really_apply(apply(x, y, z))