【C言語】M_Piを使おうとするとエラーに | 原因と円周率を扱う方法

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_PImath.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_PIcorecrt_math_defines.hを直接インクルードすることでもM_PIが使用可能です

#include<corecrt_math_defines.h>

int main() {

	int num = 3 * M_PI; //エラーにならない

	return 0;
}

円周率を自分で定義するのも選択の1つですが、既に用意されている定数があるので基本的にそちらを使うといいでしょう。

目次から探す