【发布时间】:2016-04-10 04:18:12
【问题描述】:
在 C++ 中有没有一种方法可以使某些标题必须完全按照所示顺序排列,并且重新排列它们会破坏程序?
例如:
// WARNING , THE TWO HEADERS BELOW MUST BE IN THIS ORDER EXACTLY.
#include <winsock2.h>
#include <windows.h>
// END WARNING.
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
是我现在拥有的,但我觉得 C++ 应该具有将标题组合在一起的功能,例如:
#include_order <winsock2.h, windows.h>
#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
这样,以后无论人们如何重新排列你的代码,只要执行在前,代码就不会中断。
这对于编写一个预处理器来说是微不足道的,但我想知道我是否可以在不编写自己的情况下做到这一点。
完整代码:
// WARNING , THE TWO HEADERS BELOW MUST BE IN THIS ORDER EXACTLY.
#include <winsock2.h>
#include <windows.h>
// END WARNING.
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
return 0;
}
处理问题的标准方法:(WIN32_LEAN_AND_MEAN 确实用词不当)
/* this definition must precede any includes. */
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdint.h>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
return 0;
}
【问题讨论】:
-
您的代码不应依赖于包含标头的顺序。
-
不应该,但是当我重新排列上面列出的这 2 个标头时,我的代码中出现了超过 100 个(准确地说是 116 个)错误。没有一个说“哦,你应该重新排列两个包含的顺序,duh”。
-
然后修复标题,或者告诉负责他们的人来修复它们。
-
让我打电话给微软来修复他们的标题听起来不像是解决问题的办法。现在有了一个标题命令执行器就可以解决这个问题,而无需与微软打交道。
-
这是试图通过用比萨饼替换车轮来修复漏气的轮胎。
标签: c++