在 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/