非 void 関数の 'Return' の省略は許容されますか?
関数が値を返さないが、void 以外の戻り値がある場合型の場合、コンパイラがエラーを発行することが予想されます。ただし、場合によっては、コンパイラーがそのようなコードがエラーを発生させずに通過できるようにすることがあります。
例
次のコードを考えてみましょう:
int func1() { return; // ERROR: no return value } int func2() { // Does not return anything }
func1 は return ステートメントがないためにエラーを生成しますが、func2 はエラーを生成しません。これは矛盾しているように思えるかもしれません。
根本的な理由
C では、 void 以外の戻り値の型を持つ非戻り関数を許可すると、未定義の動作が発生します。ただし、コンパイラはレガシー コードとの互換性を維持するために、エラーの代わりに警告を発行することがよくあります。
C 標準では、関数が戻り値なしで本当に終了するかどうかを判断するのが難しいため、この状況でコンパイル時エラーを強制することを意図的に避けています。
次の例を考えてみましょう:
int func3() { // ... if (condition) { // Does not return } return 0; // Reached only if condition is false }
このシナリオでは、コンパイラはコードが実行されるかどうかを知ることができません。関数の終了、または例外を通じて終了します。戻り値のないすべての場合にエラーが適用された場合、プログラムは有効であっても拒否される可能性があります。
結論
非戻り関数を許可するvoid 戻り値の型は、未定義の動作の潜在的な原因となります。コンパイラは警告を発行することがありますが、互換性を確保するために寛容な動作を選択することがよくあります。ただし、コードの明確さを維持し、潜在的な問題を回避するために、常に適切な return ステートメントを含めることを強くお勧めします。
以上がC 関数は、「void」でない場合に「return」ステートメントを安全に省略できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。