ANSI/ISO 標準事前定義マクロ

ILE C/C++ コンパイラーは、ANSI/ISO 標準で定義される以下のマクロを認識します。 他に規定がない場合、定義された時点のマクロの値は 1 です。
__DATE__
ソース・ファイルがコンパイルされた日付が入っている文字ストリング・リテラル。 日付は次の形式になります。
   "Mmm dd yyyy"
各値は、次のとおりです。
  • Mmm は月を省略形式 (JanFebMarAprMayJunJulAugSepOctNov、または Dec) で表します。
  • dd は日を表します。日が 10 より小さい場合、最初の d はブランク文字になります。
  • yyyy は年を表します。
__FILE__
ソース・ファイルの名前が入った文字ストリング・リテラル。
__LINE__
現行のソース行番号を表す整数。
__STDC__
C コンパイラーのみ C コンパイラーが ANSI 規格に準拠している場合に定義されます。 このマクロは、言語レベルが LANGLVL(*ANSI) に設定されている場合、定義されています。
__STDC_VERSION__
C コンパイラーのみ long int 型の整数定数として定義されます。 このマクロは、__STDC__ も定義され、その値が 199409L の場合にのみ定義されます。 このマクロは、C++ 用には定義されません。
__TIME__
ソース・ファイルがコンパイルされた時刻が入っている文字ストリング・リテラル。 時刻は次の形式になります。
   "hh:mm:ss"
各値は、次のとおりです。
  • hh は時間を表します。
  • mm は分を表します。
  • ss は秒を表します。
__cplusplus
C++
コンパイラーのみ C++ プログラムのコンパイル時に定義され、コンパイラーが C++ コンパイラーであることを示します。 このマクロには、末尾に下線がありません。 このマクロは、C 用には定義されません。
注:
  1. 事前定義マクロ名は、#define または #undef プリプロセッサー・ディレクティブのサブジェクトにはなりません。
  2. 事前定義 ANSI/ISO 規格マクロ名は、名前の直前の 2 つの下線 (__) 文字、大文字の名前、および名前の直後の 2 つの下線文字から構成されます。
  3. コンパイラーがソース・プログラムの後続の行を処理すると、コンパイル中に __LINE__ の値は変更されます。
  4. コンパイラーがソース・プログラムの一部である #include ファイルを処理すると、__FILE__ および __TIME__ の値は変更されます。
  5. C コンパイラーのみ #line プリプロセッサー・ディレクティブを使用して __LINE__ および __FILE__ を変更することもできます。

以下の printf() ステートメントは、事前定義マクロ __LINE____FILE__ __TIME__、 および __DATE__ の値を表示し、プログラムが __STDC__ に基づき ANSI 規格に準拠しているかを示すメッセージを印刷します。
#include <stdio.h>
#ifdef __STDC__
#   define CONFORM    "conforms"
#else
#   define CONFORM    "does not conform"
#endif
int main(void)
{
  printf("Line %d of file %s has been executed\n", __LINE__, __FILE__);
  printf("This file was compiled at %s on %s\n", __TIME__, __DATE__);
  printf("This program %s to ANSI standards\n", CONFORM);
}

関連情報

事前定義マクロの追加情報については、ILE C/C++ 解説書 を参照してください。