トラブル内容
windows.hとwinsock2.hを利用するためどちらもインクルードした際に、二重定義と思われるコンパイルエラーが発生した。
# include <windows.h>
# include <winsock2.h>
>>warning C4005: 'AF_IPX' : マクロが再定義されました。
原因
windows.hはwinsock2.hが先にインクルードされていないと、winsock.hを自動的にインクルードしてしまう。
対策内容
(1)windows.hをインクルードする前にwinsock2.hを先にインクルードする。
# include <winsock2.h> // こちらが先
# include <windows.h>
(2)_WINSOCKAPI_を定義する。
# define _WINSOCKAPI_ // windows.hを定義した際に、winsock.hを自動的にインクルードしない
# include <windows.h>
# include <winsock2.h>
コンパイルエラーを避けるため、winsock2.hを利用する場合は、可能な限りwindows.hはインクルードしない。