Некоторые кода и связанные с ними предупреждения/ошибки:Почему MinGW-w64 требует, чтобы winsock2 был включен вручную?
#include <windows.h>
#include <iphlpapi.h>
int main() { }
F:/Prog/mingw-w64/x86_64-4.9.2-win32-seh-rt_v3-rev1/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h:71:3: error: '
ADDRESS_FAMILY
' does not name a typeADDRESS_FAMILY si_family;
#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
int main() { } // this compiles successfully, only gives warning
F:/Prog/mingw-w64/x86_64-4.9.2-win32-seh-rt_v3-rev1/mingw64/x86_64-w64-mingw32/include/winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h [-Wcpp]
#include <winsock2.h>
#include <windows.h>
#include <iphlpapi.h>
int main() { }
(compilation successful).
Мои вопросы:
- Почему не
iphlpapi.h
(и другие файлы, которые полагаются на winsock) do#include <winsock2.h>
сами, или, по крайней мере, дать более приятное сообщение об ошибке? - Почему существует предупреждение, что оно должно быть до
windows.h
?
О части предупреждения, исходный файл от MS также имеет проблемы с заказом на включение. Windows.h определяет некоторые вещи winsock2..h тоже, если они еще не определены, но разные. Winsock2.h должен быть первым, чтобы получить правильные определения. – deviantfan
http://stackoverflow.com/questions/21399650/cannot-include-both-files-winsock2-windows-h тоже обращается к этой проблеме – deviantfan
@deviantfan, что ответ, казалось, объяснил, что этот заказ требуется, но не почему –