winsock2.h与ws2def.h等文件大量报错相关问题解决方法
問題:
最近在寫網絡編程相關內容,本來好好的代碼寫著寫著就出現了大量錯誤
看了下文件,全都是winsock2、ws2def 、ws2ipdef、ws2tcpip內的報錯
緣由:
我們知道,Windows網絡編程至少需要兩個頭文件:winsock2.h和windows.h,而在WinSock2.0之前還存在一個老版本的winsock.h。正是這三個頭文件的包含順序,導致了上述問題的出現。
winsock2.h的內容,在文件開頭有如下宏定義:
這是最常見的防止頭文件重復包含的保護措施。
_WINSOCKAPI_的定義阻止了對老文件winsock.h的包含
即是說,如果用戶先包含了winsock2.h就不允許再包含winsock.h了,
后半段作用是:如果用戶沒有包含windows.h(_INC_WINDOWS在windows.h中定義)就自動包含它,以定義WinSock2.0所需的類型和常量等。
現在切換到windows.h,我們會的發現以下內容:(注:這里是MS的Platform SDK中的windows.h與VC自帶的文件存在差異)
#ifndef _MAC #include <winperf.h> #include <winsock.h> #endif其實很容易理解,文件間相互包含,而的定義順序導致了winsock在winsock2之前被包含,就會導致大量重復定義的錯誤。
解決:
找到代碼中包含windows.h和winsock2.h的地方,讓winsock2在windows之前被包含就行了
(或者專門寫個頭文件,用于解決這個問題)
如果發現解決方案里并未發現包含這兩個文件,
那么很有可能是使用的開發包或者其他文件中使用了內容
我就是類似問題,開發中使用了winpcap,winpcap開發包中會包含winsock2,所以在windows.h之前包含pacp.h
在改變順序之后
報錯就全部解決了,剩下的都是我的自有bug(媽耶,寫錯這么多的嘛)
總結
以上是生活随笔為你收集整理的winsock2.h与ws2def.h等文件大量报错相关问题解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: discuz!5.5.0安装方法及常见问
- 下一篇: mac pandas文件路径_Mac进阶