Visual C++で円周率の定義M_PIなどを使う場合、gccなどと同じ風に使おうとするとM_PIが見つからないと怒られてしまいます。毎回Visual C++の場合どうやって書くんだっけなーとググって解決しているので、対応方法をまとめておこうかと思います。環境はVisual Studio 2017になります。
現象
Visual C++でM_PIを使いたい場合、gccなどと同じようにcmathをincludeしただけでは下記のようなエラーが出てコンパイルが通りません。
error C2065: 'M_PI': 定義されていない識別子です。
対策
基本的にはcmathをincludeする前に、_USE_MATH_DEFINESをdefineしてやればコンパイルが通るようになります。
#define _USE_MATH_DEFINES #include <cmath>
参考:

Math Constants
Learn more about: Math Constants
注意点としては、他のヘッダファイルのincludeよりも前に_USE_MATH_DEFINESの定義を書きましょう。そうでないと、他のヘッダファイルが間接的にcmathをinluceしていた場合、エラーが解決しないので・・・。
この辺の詳しい原因はこちらのブログで詳しく解説してあり、非常に参考になりました。

定数M_PIが使えない - 需要のないページ
能書き かなり間があいたので、小ネタ。 毎度ながら、知ってる人にとっては当たり前の内容を有難そうに書く。 遭遇したエラー 例えば、次のようなコードを書いたとする。 まあ、半径から円の面積を計算するだけの、よく見るコードだ。 ただし、円周率を...
C++を独自に拡張するのは別にいいのですが、まずは標準のC++の仕様を満たした上で拡張してほしいものですね。頼むぞMicrosoft。
コメント