e98.c
先定義後使用




/*###7 [cc] 警告: CBC:e98: 疑わしいタグですstruct XXX%%%*/
修正前
/* 構造体のポインタを使用した後に、*/
void bad(struct uso800*);
/* 構造体を定義する。 */
struct uso800 {
int a ;
int b ;
int c ;
int d ;
} ;
修正案1
/* 構造体を定義した後に、 */
struct iso800 {
int a ;
int b ;
int c ;
int d ;
} ;
/* 構造体のポインタを使用 */
void good(struct iso800*);
修正案2
/* 一見、無意味な記述を入れる */
struct iso800;
void good(struct iso800*);
解説
コンパイラが、
構造体の形を知る前に、
構造体のポインタを使用すると、
K&Rのコンパイラでは、警告は出ませんでしたが、
ANISのコンパイラでは、警告が出ます。
詳細は、
『プログラミング言語C 第2版 ANSI規格準拠
カーニハン リッチー著/石田晴久訳』
「付録A.3 構造体と共用体の宣言『不完全型』」Page262
か
C-FAQ 11.5J
C-FAQ 11.5E
を参照して下さい。