Windows.h與Winsock2.h包含順序問題


當這兩個頭文件順序顛倒時,編譯會出現許多莫名其妙的錯誤,錯誤如下:

1>…\include\ws2def.h(91) : warning C4005: 'AF_IPX' : macro redefinition
1>…\include\winsock.h(460) : see previous definition of 'AF_IPX'

[原因分析] 
      主要原因是因為<Windows.h>中包含了<Winsock.h>頭文件,由於其版本的不同,導致出現上述的錯誤。<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

[解決方案] 
      由以上代碼可以看出如果在沒有定義WIN32_LEAN_AND_MEAN宏的大前提下Windows.h有可能包含Winsock.h 頭文件,而我們要用的頭文件為 <Winsock2.h>,那么Windows.h中的<Winsock.h>和我們需要的不是一個版本,所以會有以上的錯誤。

[如何解決]

      很簡單,在當前工程(就是編譯不過的這個工程)所有include語句最前面加上#include <Winsock2.h>這樣就避免了重復定義頭文件的錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM