※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Cでプログラムを書く際に、デバッグログなどでソースファイル名や、行数などを出力したい場合がある。
ISOでは以下のマクロが定義されており、何もincludeしなくても使用できる。
## defined by ISO/IEC 9899:1990 ##
 マクロ名 | 意味                    | 例                 
----------+-------------------------+------------------- 
 __FILE__ | ソースファイル名        | main.c             
 __LINE__ | 現在行番号              | 10 
 __DATE__ | ソースコンパイル日付    | Mar 21 2011 
 __TIME__ | ソースコンパイル時刻    | 13:12:10 
 __STDC__ | 標準C準拠(#ifdef用)     | 1 

## defined by ISO/IEC 9899:1990/Amendment 1:1995 ##
 マクロ名         | 意味            | 例 
------------------+-----------------+-------------------
 __STDC_VERSION__ | C言語バージョン |: 199901 

## defined by ISO/IEC 9899:1999 ##
 マクロ名         | 意味            | 例 
------------------+-----------------+-------------------
 __func__         | 関数名          | main 
 __TIMESTAMP__    | ソース保存日時  | Mon Mar 21 13:11:59 2011 

なお、上記はUbuntu10.10上で以下のプログラムで表示させたもの。
$ cat main.c
#include <stdio.h>
// compile : gcc -o main main.c -std=c99
 
int main(){
	printf("## defined by ISO/IEC 9899:1990 ##\n");
	printf(" マクロ名 | 意味                    | 例 \n");
	printf("----------+-------------------------+-------------------\n");
	printf(" __FILE__ | ソースファイル名        | %s \n",__FILE__);
	printf(" __LINE__ | 現在行番号              | %d \n",__LINE__);
	printf(" __DATE__ | ソースコンパイル日付    | %s \n",__DATE__);
	printf(" __TIME__ | ソースコンパイル時刻    | %s \n",__TIME__);
	printf(" __STDC__ | 標準C準拠(#ifdef用)     | %d \n",__STDC__);
 
#ifdef __STDC_VERSION__    // c90では未定義 有効にするなら-std=c99で定義される。
	printf("\n\n## defined by ISO/IEC 9899:1990/Amendment 1:1995 ##\n");
	printf(" マクロ名         | 意味            | 例 \n");
	printf("------------------+-----------------+-------------------\n");
	printf(" __STDC_VERSION__ | C言語バージョン |: %ld \n",__STDC_VERSION__);
#endif
	printf("\n\n## defined by ISO/IEC 9899:1999 ##\n");
	printf(" マクロ名         | 意味            | 例 \n");
	printf("------------------+-----------------+-------------------\n");
	printf(" __func__         | 関数名          | %s \n",__func__);
	printf(" __TIMESTAMP__    | ソース保存日時  | %s \n",__TIMESTAMP__);
	return 0;
}
 
なお、gccでは他に定義済みのマクロは以下のようにすると表示できる。
$ cpp -dM /dev/null

名前:
コメント: