関数の戻り値の型はint
. まだ宣言されていない関数呼び出しがある場合、戻り値の型はデフォルトint
で C 言語になります。あなたの場合、呼び出し func(1,2);
、デフォルトはint
であり、後で定義された関数も ですint
。だからこそ争いがない。
戻り値の型を 以外に変更するint
と、エラーが発生します。
たとえば、以下のコードではconflicting-types
エラーが発生します。関数呼び出しは暗黙的にint
戻り関数を宣言し、後で元の関数定義の型はfloat
です。
このコードは次のエラーを返します。
#include<stdio.h>
int main(){
float ret;
printf("\n main() is called! \n");
ret = func(1,2);
printf("\n The ret value is : %f \n",ret);
return 0;
}
float func(int x,int y){
printf("\n func() is called! x: %d , y : %d \n",x,y);
if(x == 1){
return x+y;
}
else{
return y-x;
}
}
編集:
C言語では、コンパイラの初期段階では、最初に関数呼び出しが見られると暗黙的に宣言され、後の段階で定義が検索されます。そのため、検索が失敗すると、未定義の関数エラーが発生しますが、宣言されていない関数は発生しません。しかし、定義はあるが、タイプが競合している場合、競合するタイプのエラーが発生します...しかし、あなたの場合、デフォルトの宣言と元の宣言が同じであるため、エラーは発生しませんでした。
また、関数が宣言を見ていないとすぐに関数が定義されている場合、コンパイルをすぐに中止する必要がないことに注意する必要があります。最初に宣言にフラグを立てるだけimplicit
で、定義がまったくない場合はコードのどこにもありません。次に、をスローしundefined function error
ます。