Par*_*val 5 c c-preprocessor preprocessor-directive
假设我有 2 组 P_A、P_B、P_C 值,如下所示
#define X_P_A 2
#define X_P_B 3
#define X_P_C 4
#define Y_P_A 5
#define Y_P_B 6
#define Y_P_C 7
Run Code Online (Sandbox Code Playgroud)
有 3 种类型的用户:- 一次只需要 X 变体,一次只需要 Y 变体,一次可能需要两者。
例如
#ifdef X
#define P_A X_P_A
#define P_B X_P_B
#define P_C X_P_C
#endif
#ifdef Y
#define P_A Y_P_A
#define P_B Y_P_B
#define P_C Y_P_C
#endif
Run Code Online (Sandbox Code Playgroud)
需要两者的用户将在运行时做出决定并根据需要调用 X_P_<> 或 Y_P_<>。
有没有办法让它更简单,这样我就不必为每个字段编写条件宏
ifdef X
// do something magical does defines all P_<> to X_P_<>
#endif
Run Code Online (Sandbox Code Playgroud)
我知道这听起来很愚蠢。您可能会问为什么不直接在 X 上使用 X_P_<> 变体。我只是想了解是否可能。
我可以改变宏定义的方式。是否可能类似于以下代码:(以下代码的问题是编译失败,因为 #if 不允许在 #define 中)
#define A 1
#define B 2
#define C 3
/* Not a correct #define macro */
#define X_P(x) \
#if(x == A) 2 \
#elif(x == B) 3 \
#elif(x == C) 4 \
#endif
#ifdef X
#define P(x) X_P(x)
#endif
Run Code Online (Sandbox Code Playgroud)
#define X_P(x) ((x) - 0x10 + 1) // 1 is 0x31 and A is 0x41 hence A will give 0x41 - 0x10 + 1 = 0x32
#define Y_P(y) ((y) - 0x10 + 5) // same logic applies
Run Code Online (Sandbox Code Playgroud)
这会是您正在寻找的吗?虽然没有完全回答你的问题
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |