GUST NOTCH? DIARY

math.h の M_PI などは仕様外だった

たまーに、πの値が必要になるのですが、math.h を include しても「定義されていません」みたいに言われちゃうんですね。まあ、円周率の値は記憶してるから自分で define して使ってたんですが。
今日は珍しく、math.h の中身を確認してみようと思ったわけです。そしたらなんと、以下のような文がコメントとして書かれてました。環境はVS2008です。

#if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED)
#define _MATH_DEFINES_DEFINED

/* Define _USE_MATH_DEFINES before including math.h to expose these macro
* definitions for common math constants. These are placed under an #ifdef
* since these commonly-defined names are not part of the C/C++ standards.
*/

「これらはC/C++の標準外です」とな。使うときは _USE_MATH_DEFINES を define する必要があったらしい。知らなかった。
というわけで、Linux の方ではどうなっているのかも調べてみました。
Vine5.0 の gcc 4.1.2 ではこうなってました。

#if defined __USE_BSD || defined __USE_XOPEN
# define M_E 2.7182818284590452354 /* e */
...
# define M_PI 3.14159265358979323846 /* pi */
...

何も define しなくてもちゃんと使える。どこでどっちが立ってるんだろう?