c++ - 为什么 windows.h 禁用包警告?

标签 c++ c windows memory-alignment

windows.h 文件中,有以下几行:

#ifndef __WINDOWS_DONT_DISABLE_PRAGMA_PACK_WARNING__
#pragma warning(disable:4103)
#endif

我发现在重新排序一些包含文件后我们有 pragma pack 警告。对齐不良的风险似乎很严重。 Microsoft 为什么要禁用此警告?

最佳答案

参见here .

本质上,windows.h 包含许多子 header ,其中许多子 header 定义了重新映射某些硬件定义字段的结构(因此,不需要填充)

由于并非每个子包含都执行推送/弹出操作,因此它会禁用 4103 警告以避免出现虚假警告。

MS 本身建议将 windows.h 作为第一个或最后一个包含,但不要混合使用。这不是一个很好的选择,但考虑到 windows.h 已有 25 年以上的历史,它定义的一些函数和结构仍然是相同的......而其他一些则无法在不破坏现有应用程序的情况下进行修改。

<windows.h>它本身通过确保您不应该直接包含的所有涉及的子标题都包含在正确的顺序中来确保正确的恢复。

如果您启用该警告,您将看到 windows.h 所屏蔽的所有内部不匹配。

关于c++ - 为什么 windows.h 禁用包警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374207/

相关文章:

c++ - 有史以来最奇怪的错误 - int 定义导致 sigsegv。堆栈溢出?

C++ 问题 : Cannot allocate an object of abstract type, 但为什么呢?

c++ - 专门化模板类时的继承

将结构复制到字节数组

windows - 为 IE 运行一个 Selenium 节点作为 WIndows 2003 服务

vb.net - Application1 已停止工作

c++ - 如何在 XCode 7 中应用支持 OpenMP

c - SDL 和 GLUT 之间的区别

c - 特定地址处的动态结构数组

windows - Cygwin `rsync` 本地文件夹路径