C ++依赖标头排序

时间:2016-04-09 19:25:12

标签: c++

在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;
}

1 个答案:

答案 0 :(得分:1)

解决此问题的未来证明方法是使用visual studio:

  

属性=&gt; C / C ++ =&gt;预处理器=&gt;定义=&gt; WIN32_LEAN_AND_MEAN

它将为您的整个项目全局定义WIN32_LEAN_AND_MEAN。如果您不使用visual studio,请在IDE中找到可让您执行相同操作的设置。

您还可以使用预编译的标头来解决此问题。如果在那里定义WIN32_LEAN_AND_MEAN,那么您是安全的,因为在预编译头之前不能包含头。

如果某人修改了预编译的标题并想知道为什么整个项目不再编译,那么我很确定他们会知道在哪里看。另外,您可以在那里添加一个很棒的评论