msvc pragma 警告在 cpp 文件中省略 'default'
msvc pragma warning omitting 'default' in cpp file
我在 cpp 文件中有一些 pragma warning (disable : xxx)
(不是 headers):
现在,如果我们在同一 cpp 文件中省略 pragma warning (default : xxx)
,该警告是在项目中的所有 cpp 文件中还是仅在该 cpp 文件中保持禁用状态?
另外,如果我们编译多个项目,禁用警告会影响所有项目吗?假设 cpp 文件中的 pragma 仅不在 headers.
中
例如,我有:
#ifdef NDEBUG // In release build using CrtDebug functions has no effect!
#define CRT_DBG_REPORT(...) 0
#pragma warning (disable : 6326) // Potential comparison of a constant with another constant
#pragma warning (disable : 26814) // The const variable can be computed at compile time
#pragma warning (disable : 26477) // Use nullptr rather than 0 or NULL
#pragma warning (disable : 4127) // conditional expression is constant
#pragma warning (disable : 4100) // unreferenced formal parameter
#else
#define CRT_DBG_REPORT _CrtDbgReportW
#endif // NDEBUG
我想忽略设置回 'default' 但确保它只禁用此 cpp 文件的警告。
编辑
感谢评论区的建议...
如果我们启用 Unity
构建,"undefauled"(仅禁用)cpp pragma 的行为是什么? Project properties -> Advanced -> Unity.
如果在 cpp 文件中禁用警告,它们只会影响 pragma 下方的行(它们不会影响其他编译单元)。尽管 Unity 构建可能会导致问题 (猜测,现在无法测试)。
一般来说,如果您是 enabling/disabling 通过 pragma 发出警告,这可能是解决方法:
#define PUSH_DISABLE_WARNINGS \
__pragma(warning(push)) \
__pragma(warning(disable : 6326)) \
__pragma(warning(disable : 26814)) \
__pragma(warning(disable : 26477)) \
__pragma(warning(disable : 4127)) \
__pragma(warning(disable : 4100))
#define POP_DISABLE_WARNINGS \
__pragma(warning(pop))
然后稍后...
PUSH_DISABLE_WARNINGS
/* warnings will only be disabled here */
POP_DISABLE_WARNINGS
我在 cpp 文件中有一些 pragma warning (disable : xxx)
(不是 headers):
现在,如果我们在同一 cpp 文件中省略 pragma warning (default : xxx)
,该警告是在项目中的所有 cpp 文件中还是仅在该 cpp 文件中保持禁用状态?
另外,如果我们编译多个项目,禁用警告会影响所有项目吗?假设 cpp 文件中的 pragma 仅不在 headers.
中例如,我有:
#ifdef NDEBUG // In release build using CrtDebug functions has no effect!
#define CRT_DBG_REPORT(...) 0
#pragma warning (disable : 6326) // Potential comparison of a constant with another constant
#pragma warning (disable : 26814) // The const variable can be computed at compile time
#pragma warning (disable : 26477) // Use nullptr rather than 0 or NULL
#pragma warning (disable : 4127) // conditional expression is constant
#pragma warning (disable : 4100) // unreferenced formal parameter
#else
#define CRT_DBG_REPORT _CrtDbgReportW
#endif // NDEBUG
我想忽略设置回 'default' 但确保它只禁用此 cpp 文件的警告。
编辑
感谢评论区的建议...
如果我们启用 Unity
构建,"undefauled"(仅禁用)cpp pragma 的行为是什么? Project properties -> Advanced -> Unity.
如果在 cpp 文件中禁用警告,它们只会影响 pragma 下方的行(它们不会影响其他编译单元)。尽管 Unity 构建可能会导致问题 (猜测,现在无法测试)。
一般来说,如果您是 enabling/disabling 通过 pragma 发出警告,这可能是解决方法:
#define PUSH_DISABLE_WARNINGS \
__pragma(warning(push)) \
__pragma(warning(disable : 6326)) \
__pragma(warning(disable : 26814)) \
__pragma(warning(disable : 26477)) \
__pragma(warning(disable : 4127)) \
__pragma(warning(disable : 4100))
#define POP_DISABLE_WARNINGS \
__pragma(warning(pop))
然后稍后...
PUSH_DISABLE_WARNINGS
/* warnings will only be disabled here */
POP_DISABLE_WARNINGS