我正在开发两个应用程序使用的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宏?
答案 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
,并在构建版本时取消定义。