使用预处理器条件生成C/ c++变量名



我想根据编译时常数有条件地生成一个变量名。可能还有其他方法可以做到这一点,但我想看看使用预处理器是否可行。

#define FUNC(X) ((X > 10) ? foo : bar)
#define CONCAT1(x,y) x##y
#define CONCAT(x,y) CONCAT1(x,y)
int main() {
// Does not compile and generate "int x_bar;"
int CONCAT(x_, FUNC(4));
}

回想一下,宏可以直接进行令牌替换。所以这:

CONCAT(x_, FUNC(4))

将展开为:

x_((4 > 10) ? foo : bar)

对于令牌连接无效。相反,您应该将条件放在#if中,并根据其结果定义FUNC:

#define X 4
#if (X > 10)
#define FUNC foo
#else
#define FUNC bar
#endif

相关内容

  • 没有找到相关文章

最新更新