有關同時包含與頭文件的問題

   最近發現winsock2.h頭文件與windows.h頭文件在同時包含的時候會有問題,編譯時會產生很多類型重複定義的錯誤。

 

[原因分析]

   主要原因是因爲<windows.h>中包含了<winsock.h>頭文件,由於其版本的不同(winsock.h支持socket 1.1),導致出現上述的錯誤。

<windows.h>中相關代碼如下:

              #ifndef WIN32_LEAN_AND_MEAN

              #include<cderr.h>

              #include <dde.h>

              #include <ddeml.h>

              ........

               #ifndef _MAC

              #include <winperf.h>

              #include <winsock.h>

              #endif

               .......

              #include <commdlg.h>

              #endif

              #endif

[解決方案]

  方案(1) 首先包含winsock2.h,然後再包括 windows.h,要注意包含的順序。

    Windows.h中,包含了winsock.hwinsock.h支持socket 1.1)。因此首先包含windows.h,然後再包含winsock2.h,顯然會出現問題。

 

方案(2) 由以上代碼可以看出如果在沒有定義WIN32_LEAN_AND_MEAN宏的大前

windows.h有可能包含winsock.h 頭文件,因此我們得出一個很簡單

的解決方法就是在包含<windows.h>之前定義WIN32_LEAN_AND_MEAN,

下所示:

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章