检查#ifdef中的宏或真实条件

时间:2017-07-12 09:16:33

标签: c++ macros c-preprocessor

我正在开发两个应用程序使用的c ++库,我们称之为 App1 App2 。我也是 App1 的开发者。

我想在 App2 部署后使用的库中开发一个新功能,它与 App1 完全兼容;即使我不想包含它,因为它会导致我的应用程序链接到其他库。我希望有一个更轻量级的可执行文件。

在开发此功能时,我必须在库的许多部分写这样的内容:

#ifdef FEATURE_APP_2
    ...
#endif

问题是在开发时,IDE(VS2013)"禁用" #ifdef#endif之间的代码,因此无法从智能感知或编译器检查中受益。

所以我正在考虑如下所示的双重检查,请阅读this question

#if defined(FEATURE_APP_2) || defined (1)
    ...
#endif

一旦编写,编译和测试了所有内容,我只需#if defined(FEATURE_APP_2) || defined (1)即可找到并替换#if defined(FEATURE_APP_2)

问题在于声明:

#if defined(FEATURE_APP_2) || defined (1)

不被接受。

所以问题是我怎么能或者真实的"宏观和假冒" TRUE宏?

1 个答案:

答案 0 :(得分:4)

整数文字1不是定义与否的宏,这是defined检查的内容。而是使用普通的1,如

#if defined(FEATURE_APP_2) || 1
...
#endif

这就是说我不会真的推荐你的解决方案,甚至在我的修复之后,因为很容易忘记在某个地方删除一个|| 1

相反,您可以使用您检查的新宏,例如

#if defined(FEATURE_APP_2) || defined(ENABLE_ALL_FEATURES)
...
#endif

然后在开发时为项目定义ENABLE_ALL_FEATURES,并在构建版本时取消定义。