【发布时间】:2019-12-20 12:53:55
【问题描述】:
我想使用条件编译来测试我的代码的不同属性;但是,我不想污染全局命名空间。有人能告诉我是否有办法在不使用#define 的情况下使用条件编译吗?
我已经搜索了一个选项,但大多数其他帖子都提到了static const 等的用法,以便在运行时选择不同的代码。但是,我想编译不同的代码。例如,而不是:
#define A_HASH_DEFINE
...
#ifdef A_HASH_DEFINE
Some code
#elif ANOTHER_HASH_DEFINE
Some other code
#endif
我希望能够使用具有范围的东西,例如:
scope::A_SCOPED_HASH_DEFINE
...
#ifdef scope::A_SCOPED_HASH_DEFINE
Some code
#elif scope::ANOTHER_SCOPED_HASH_DEFINE
Some other code
#endif
【问题讨论】:
-
预处理器在这方面是愚蠢的。没有作用域,只有更长的名称,例如:
SCOPE_A_SCOPED_HASH_DEFINE -
范围是指名称空间吗?在命名空间内使用
constexprconstexpr uint64_t HASH_DEFINE = 256; -
@user4581301 我明白了。我想这就是我必须做的:/谢谢!
-
@ajax_velu 是的,我的意思是在命名空间内。 constexpr 是否适用于 #ifdef 预处理器命令?
-
如果您正在查看许多非常不同或非常复杂的代码,请考虑将不同的代码放在单独的文件中,并让构建系统通过链接到正确的文件来处理它。
标签: c++ compilation c-preprocessor conditional-compilation