MSVC 杂注警告省略 CPP 文件中的'default'



我在 cpp 文件(不是标头(中有一些pragma warning (disable : xxx)

现在,如果我们在同一个 CPP 文件中省略pragma warning (default : xxx),该警告是在项目中的所有 CPP 文件中还是仅在此 CPP 文件中保持禁用状态?

此外,如果我们编译多个项目,禁用警告是否会影响所有项目? 假设编译指示仅在 cpp 文件中而不是在标头中。

例如,我有:

#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

我想省略设置回"默认",但确保它只禁用此 cpp 文件的警告。

编辑

感谢评论部分的建议...

如果我们启用Unity构建,"未解除"(仅禁用(cpp 编译指示的行为是什么?Project properties -> Advanced -> Unity.

如果在 cpp 文件中禁用了警告,它们只会影响杂注下方的行(它们不会影响其他编译单元(。不过,Unity 构建可能会导致问题(猜测,现在无法对此进行测试(。

一般来说,如果您通过编译指示启用/禁用警告,这可能是要走的路:

#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

相关内容

最新更新