c++ - msvc pragma 警告在 cpp 文件中省略“默认”
问题描述
我有一些pragma warning (disable : xxx)
cpp 文件(不是标题):
现在,如果我们在同一个 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
构建,“undefauled”(仅禁用)cpp pragma 的行为是什么?Project properties -> Advanced -> Unity.
解决方案
如果警告在 cpp 文件中被禁用,它们只会影响 pragma 下的行(它们不会影响其他编译单元)。不过,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
推荐阅读
- c - 为什么 write() 在 printf() 之前执行?不是应该是顺序的吗?
- javascript - 使用 Firebase SDK 上传文件
- oracle - ORA-01017 无效的用户名/密码登录被拒绝
- postgresql - 从另一个映射表中选择查询中的列
- list - Lisp 函数,它接受两个列表并返回它们的乘积
- ios - iOS 静默推送通知已取消
- javascript - 在 jquery 调色板颜色选择器插件中设置初始颜色
- json - 如何更新存储在 PostgreSQL 文本字段中的 json 数据?
- floating-point - 如何标准化两个 IEEE754 单精度数之和?
- node.js - Nodejs express bodyParser 丢弃对象键