winsock2の罠

winsock2を使用する場合windows.hをインクルードする前にwinsock2.hをインクルードしましょう。

#include <windows.h>
#include <WinSock2.h>

とすると

1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2def.h(91): warning C4005: 'AF_IPX' : マクロが再定義されました。
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winsock.h(460) : 'AF_IPX' の前の定義を確認してください
...

と怒られます。
どうもwindows.hはインクルードする前にwinsockがインクルードされていないとwinsock.hをインクルードするのだとか。
ということで対応策はインクルードの順番を変えるか_WINSOCKAPI_をdefineしましょう。 -> ソース

#include <WinSock2.h>
#include <windows.h>

#define _WINSOCKAPI_
#include <windows.h>
#include <WinSock2.h>

ちなみにWIN32_LEAN_AND_MEANを定義しても良いようで。 -> ソース2
まぁLEAN_AND_MEANはwinsock意外にも影響するのでwinsockのみであれば_WINSOCKAPI_で良いでしょう。
ひっかかったのでメモ。