あるファイルにおいてある関数を呼び出す時,そのファイル内にその関数の定義がない場合,またはその関数の定義を含むがその関数の定義よりも前にその関数を呼び出す場合,その関数の呼出しより前にその関数のプロトタイプを宣言することを推奨します。
関数呼出し時に仮引数の型がわからない時,コンパイラは関数定義における仮引数の型とは異なる型で関数を呼びだす可能性があり注,その場合,プログラムの実行結果が不正になるためです。
int型やunsigned int型より小さい算術型はint型,またはそれで表現できない型はunsigned int 型に,float型はdouble型になります。 |
AAA.c: void func(char a, char b); //2つの引数は各々A, Xレジスタから受け取る BBB.c: extern void func(char a, char b); //プロトタイプ宣言 void main (void) { char x=1, y=1; func(x, y); //2つの引数は各々A, Xレジスタに割り付けられて } //関数呼び出しが行われる |
コンパイル・オプション“-refs_without_declaration”を指定すると関数の宣言がないことを検査できます。