可変ブログ

色々メモとか。とりあえず自分が分かるように。その後、なるべく人が見て分かるように。可変。

windows.hとwinsock.hとwinsock2.hと

winsock.hとwinsock2.hは競合する
windows.hにはwinsock.hが含まれている
windows.hとwinsock2.hをどちらも使いたいときにどうしようもなくなる
windows.hをインクルードする前に下記を定義するとwinsock.hのインクルードを回避してくれる。
#define WIN32_LEAN_AND_MEAN
分割コンパイルの時には複数回ヘッダが読まれることがあるので#define WIN32_LEAN_AND_MEANを記載する位置に注意する。
なるべく上位で定義しないとうまく回避してくれない場合がある。

もしくはインクルードの順番をwinsock2.h -> winsock.hにするとよい。


#define _WINSOCKAPI_
この対処はよくないと思う。
本当はインクルードしてないwinsock.hをインクルードしたからもうしなくていいよっていうウソの定義をしている。
どっかでエラーが出るかもっていうか実際にboost::asioでエラーが出た。
boost::asioには_WINSOCKAPI_が定義されているとエラーを出すところがある。