[1820] Re:標準ライブラリのヘッダファイルのインクルードガード
投稿者:774RR
2012/04/02 15:01:47
あとついでに
・先のスレッドで紹介したとおり、関数宣言は(矛盾しない限り)繰り返してよいこと
・同一内容の #define を繰り返すことは認められていること
ISO/IEC 14882:1998 16.3 - 3,4
JIS X 3010:2003 6.10.3
・C++ では typedef の同一内容の繰り返しは認められている (同 7.1.3-2) こと
・C では typedef の同一内容の繰り返しについて記述が無いこと
(未規定なので、処理系は許しても良いしエラーにしても良い)
から、現代的「ヘッダで宣言を100%先行させる」プログラミングにおいて
正しく作られたヘッダはガードしなくても良い可能性があります。
typedef の同一内容の繰り返しに関して調査した範囲では
・ Visual C++ 2005 の C コンパイラは無警告で認めています。
・ GCC 4 の C コンパイラは認めていません。
・某社の組み込み系コンパイラは認めていません。
(enum/struct 等の繰り返し宣言の認め方については言語仕様書・処理系の挙動とも調べていません)
コンパイル時間の短縮のためには「ヘッダの同一内容を複数回 parse しない」よう
ガードに類する機構があったほうが望ましいですけどね。