C言語で円周率を使う場合、M_PI
というmath.h
で定義されている定数を使うことで、簡単に計算できます。
ですが、M_PI
を使おうとしたら、math.h
をインクルードしているにも関わらず、識別子’M_PI’が定義されていませんというエラーが表示されることがあります。
特に、Visual StudioでC言語プログラミングをしている方はこのような問題に遭遇しているのではないでしょうか。
今回は、C言語でM_PI
を使おうとするとなぜエラーになってしまうのか解説します。
M_Piを呼び出すとエラーになる原因
原因は1つ、math.h
でM_PI定数が定義されていないからです。
最近のC言語ではmath.h
からM_PI定数
が除外されており、M_PI定数
を使おうとすると定義されていないというエラーが表示されてしまうのです。
そのため下記コードはエラーになります
#include<math.h>
int main() {
int num = 3 * M_PI; //エラー
return 0;
}
ですが、M_PI
を使う方法が完全に消えたわけではなく、ある方法を使えばM_PI定数
を自分で定義することなく使用できます。
M_PI定数を使えるようにする方法
定数M_PI
を使えるようにする方法は簡単です。
math.h
をインクルードしている行より前に_USE_MATH_DEFINES
をdefineマクロで定義してあげるだけです。
#define _USE_MATH_DEFINES
実はM_PI
はmath.h
から完全に消されたわけではなく、_USE_MATH_DEFINES
を使ったifdefプリプロセッサによる分岐で定義するかどうかというプログラムが残っているのです。
そのため、math.h
をインクルードする行の前に_USE_MATH_DEFINES
を定義してあげることによって、これまで通りM_PI定数を呼び出せるのです。
#define _USE_MATH_DEFINES
#include<math.h>
int main() {
int num = 3 * M_PI; //エラーにならない
return 0;
}
ちなみに、M_PI
はcorecrt_math_defines.h
を直接インクルードすることでもM_PI
が使用可能です
#include<corecrt_math_defines.h>
int main() {
int num = 3 * M_PI; //エラーにならない
return 0;
}
円周率を自分で定義するのも選択の1つですが、既に用意されている定数があるので基本的にそちらを使うといいでしょう。