環境と注意事項
今回のエラーは #include <windows.h>
に由来するものです。linuxユーザーの方は安心してください。
- Visual Studio 2022 (cl.exe 19.41.34120)
- Windows 11
先日、c++のコードを書いている時に不可解なコンパイルエラーに遭遇しました。
float fov, aspect, near, far;
auto m_projection = glm::perspective( fov, aspect, near, far );
エラーメッセージはこのようになります。
filename.hpp(43): error C2059: 構文エラー: ','
少なくとも私の知る範囲では、どこが構文エラーなのか分かりません。そこで試行錯誤の結果、コンパイルが通るよう改変したコードがこちらになります。
float fov, aspect, near_, far_;
auto m_projection = glm::perspective( fov, aspect, near_, far_ );
near
と far
は予約語ではなかったはずなのですが、これらのキーワードは使用できないようです。
要因
near
とfar
がプリプロセッサで定義されていたことが要因でした。
先ほどのコードも、#undef
を挟めば問題なくコンパイルすることができます。
#undef near
#undef far
float fov, aspect, near, far;
auto m_projection = glm::perspective( fov, aspect, near, far );
参考文献
こちらの記事のおかげで原因を知ることができました。ありがとうございます。
所感
windows.h
難しすぎるだろと思いましたが、C言語からの仕様を受け継ぎながらこう言った挙動を起こさない他の環境が優秀すぎるだけで windows.h
に落ち度はないのかも...と思いました。