4

C では、 の戻り値をキャストしないことがベスト プラクティスであることを認識していますmalloc()malloc()を含めない場合、コンパイラはそれが int を返すと想定していることを読みましたstdlib.h。もちろん、int を int ではないものに暗黙的に代入しようとするとエラーが発生しますが、そのエラーは明示的なキャストによって隠蔽される可能性があります。したがって、明示的にキャストする危険性がありmalloc()ます。

私が作成したすべての関数について、関数が存在しない場合、コンパイラはそのことを教えてくれます。malloc()を含めていなくても、コンパイラがそれが int を返すと想定するのはなぜstdlib.hですか? malloc()含めるまで未定義のままにするべきではありませんstdlib.hか?

4

4 に答える 4

7

実際には、呼び出した関数 (malloc だけでなく) の宣言をコンパイラが認識していない場合、コンパイラはそれを想定して.externを返しますint。私が使用したほとんどのコンパイラは、警告レベルを上げない限り、エラーではなく警告を出すだけです。

これは C の初期にまでさかのぼります。C99 では許可されていないと思います。

@Michael のコメント: K&R (page 72) によると、あなたは正しいようです:

以前に宣言されていない名前が式に出現し、その後に左括弧が続く場合、その名前はコンテキストによって関数名であると宣言され、関数は int を返すと想定され、その引数については何も想定されません。

于 2009-07-09T21:01:12.020 に答える
1

これは、すべての関数のデフォルトです。

私のコンパイラは、関数を定義していない場合、それint testFunction()は定義されていないと教えてくれます。

于 2009-07-09T20:58:57.750 に答える
1

@Burkhardが言ったように、それはデフォルトです。関数のプロトタイプを定義していない場合、コンパイラは警告を吐き出し、関数が int を返すと想定します。次に、実際に定義していない場合は、リンカーがすぐに停止するエラーを表示します。

于 2009-07-09T21:01:33.140 に答える
0

int特に指定がない限り、すべての関数はデフォルトで返されると想定されます。

ここを参照してください。

于 2009-07-09T21:00:58.213 に答える