@ cost's answer ссылки на обсуждение, которое, помимо прочего, задает этот вопрос, на который так и не был дан ответ:
Есть ли причина, по которой я не могу включить windows.h до winsock2.h, он дает мне массу ошибок, но как только я переключаю их порядок, все в порядке ... почему?
windows.h
включает winsock2.h
при компиляции для более новыхВерсии для Windows, но для более старых разработок вместо них используется winsock.h
.Однако проблема не ограничивается только windows.h
.Каждый раз, когда winsock.h
включается до winsock2.h
, будут ошибки компилятора.Причина в том, что два файла НЕ сосуществуют очень хорошо.winsock2.h
был разработан, чтобы заменить winsock.h
, а не расширять его.Все, что определено в winsock.h
, также определено в winsock2.h
.Если winsock2.h
включено до winsock.h
, winsock2.h
определяет _WINSOCKAPI_
для предотвращения обработки компилятором последующих включений winsock.h
, и все в порядке.Но если winsock.h
включено до winsock2.h
, winsock2.h
не обнаружит это и попытается переопределить все, что winsock.h
уже определило, что приведет к сбою компиляции.
Вы должны бытьочень осторожны при смешивании кода, который использует winsock.h
с кодом, который использует winsock2.h
в том же проекте.Например, при написании собственного кода сокета, использующего winsock2.h
, и использовании сторонних библиотек, которые все еще используют winsock.h
.