我正在开发一个大型C ++项目。我有一堆宏用于项目的一个子集,但我不想在任何地方导出它们,以避免污染不相关的代码。
现在,我的许多文件看起来都像
#include <MyMacros.h> // defines MACRO_1, MACRO_2, ... MACRO_N
// bla
// bla
#undef MACRO_1
#undef MACRO_2
// ...
#undef MACRO_N
当然,这将打破我引入MACRO_N+1
的那一天。
有没有更好的方法可以某种方式一次性取消所有这些宏?
答案 0 :(得分:3)
您可以创建一个单独的包含文件,该文件取消定义相关宏并将其包含在源文件中。
例如,在undefMacros.h中:
MSBuild("./CakeWebSite.sln", new MSBuildSettings()
.WithProperty("WebPublishMethod", "FileSystem")
.WithProperty("LastUsedBuildConfiguration", "Debug")
.WithProperty("LastUsedPlatform", "Any CPU")
.WithProperty("ExcludeApp_Data", "False")
.WithProperty("publishUrl", cakePublishPath)
.WithProperty("OutDir", cakePublishPath)
.WithProperty("DeleteExistingFiles", "True")
然后在你的源文件中:
#undef MACRO_1
#undef MACRO_2
// ...
#undef MACRO_N
然后,除了最初定义宏的位置之外,您只需要在一个地方维护#include <MyMacros.h> // defines MACRO_1, MACRO_2, ... MACRO_N
// bla
// bla
#include <undefMacros.h>
语句。
答案 1 :(得分:1)
dbush's answer上的变体是在一个文件中组合定义和清除宏:
<强> MyMacros.h
强>
#ifndef MACRO_1
# define MACRO_1 ...
# define MACRO_2 ...
...
# define MACRO_N ...
//! Remember to add #undef if new macros are added
#else
# undef MACRO_1
# undef MACRO_2
...
# undef MACRO_N
#endif
然后只需将此文件包含在您使用它的顶部和底部:
#include "MyMacros.h"
...
...
...
#include "MyMacros.h"
如果添加新宏,将所有内容保存在一个文件中应该可以更容易记住添加#undef
。