1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

変数名にnearとfarを使ってはいけないという話

Posted at

環境と注意事項

今回のエラーは #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_ );

nearfar は予約語ではなかったはずなのですが、これらのキーワードは使用できないようです。

要因

nearfarがプリプロセッサで定義されていたことが要因でした。
先ほどのコードも、#undefを挟めば問題なくコンパイルすることができます。

#undef near
#undef far

float fov, aspect, near, far;
auto m_projection = glm::perspective( fov, aspect, near, far );

参考文献

こちらの記事のおかげで原因を知ることができました。ありがとうございます。

所感

windows.h 難しすぎるだろと思いましたが、C言語からの仕様を受け継ぎながらこう言った挙動を起こさない他の環境が優秀すぎるだけで windows.h に落ち度はないのかも...と思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?