我对宏有点陌生,所以很容易,但是我们有一个外部库,在 Windows 下编译时会生成大量警告(在 linux 上还不错)。它是一个只有标题的库,所以我不能只关闭整个库的警告,但我可以禁用生成警告的每个部分(这有点乏味)
所以我想知道是否可以创建一个宏,这样我就可以在几行中完成,而不是在下面输入以下内容。
#ifdef _WIN32
#pragma warning (push)
#pragma warning(disable : 4355) // 'this' used in base member initialize list
#endif
code that generates warning
#ifdef _WIN32
#pragma warning (pop)
#endif
但是,当我尝试创建如下宏时
// Disable a warning on win32 platform
// You must call DISABLE_WIN32_PRAGMA_WARN_END afterwards
#define DISABLE_WIN32_PRAGMA_WARN (nnn) \
#ifdef _WIN32 \
#pragma warning (push) \
#pragma warning(disable : nnn ) \
#endif
#define DISABLE_WIN32_PRAGMA_WARN_END \
#ifdef _WIN32 \
#pragma warning (pop) \
#endif
但是使用 VS2012 编译时出现以下错误
error C2121: '#' : invalid character : possibly the result of a macro expansion
error C2065: 'nnn' : undeclared identifier
error C2351: obsolete C++ constructor initialization syntax
error C2612: trailing 'identifier' illegal in base/member initializer list