Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查ifdef中的宏或真条件 我开发了一个由两个应用程序使用的C++库,我们称之为APP1和APP2。我也是App1的开发者_C++_Macros_C Preprocessor - Fatal编程技术网

检查ifdef中的宏或真条件 我开发了一个由两个应用程序使用的C++库,我们称之为APP1和APP2。我也是App1的开发者

检查ifdef中的宏或真条件 我开发了一个由两个应用程序使用的C++库,我们称之为APP1和APP2。我也是App1的开发者,c++,macros,c-preprocessor,C++,Macros,C Preprocessor,我想在App2部署后使用的库中开发一个新功能,它与App1完全兼容;即使我不想包含它,因为它会导致我的应用程序链接到其他库。我希望有一个更轻量级的可执行文件 在开发此功能时,我必须在库的许多部分编写如下内容: #ifdef FEATURE_APP_2 ... #endif 问题是,在开发过程中,IDE VS2013禁用了ifdef和endif之间的代码,因此我无法从intellisense或编译器检查中获益 所以我在考虑像下面这样的双重检查,读入: 一旦所有内容都编写、编译和测试完毕,

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

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

#ifdef FEATURE_APP_2
    ...
#endif
问题是,在开发过程中,IDE VS2013禁用了ifdef和endif之间的代码,因此我无法从intellisense或编译器检查中获益

所以我在考虑像下面这样的双重检查,读入:

一旦所有内容都编写、编译和测试完毕,我就可以简单地找到if-definedFEATURE_-APP|u 2 | defined 1并将其替换为just-if-definedFEATURE_-APP|u 2

问题在于,该声明:

#if defined(FEATURE_APP_2) || defined (1)
不接受

所以问题是,我如何才能定义一个真正的宏和一个虚假的真正的宏?

整数文本1不是一个定义了或没有定义的宏,这就是定义检查的内容。相反,只使用普通1,如中所示

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

相反,您可以检查一个新的宏,如

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

然后在开发时为项目定义ENABLE_ALL_功能,并在构建发行版时取消定义。

您也回答了我的隐含问题
#if defined(FEATURE_APP_2) || 1
...
#endif
#if defined(FEATURE_APP_2) || defined(ENABLE_ALL_FEATURES)
...
#endif