C での return ステートメントの省略: 予期しない動作
C では、void 以外の関数で return ステートメントを省略すると、未定義の動作が発生する可能性があります。ただし、場合によっては、return が欠落しているにもかかわらずコードが正しく動作しているように見えることがあります。
この一見無害な省略は、関数の制御フローが return ステートメントなしで終了に達すると、コンパイラは、これを値のない暗黙的な return ステートメントとして解釈します。この動作は、main() 関数を除くすべての非 void 関数に適用されます。
この方法を実行すると、一見正しい出力が得られる場合がありますが、そのようなコードが未定義の動作を呼び出すことを理解することが重要です。 ISO C -98 (セクション 6.6.3/2) に従って、値を返す関数の関数の末尾からフローすると、未定義の動作が発生します。
提供された例では、関数内の return ステートメントを省略しています。 getBound 関数ではコンパイラ エラーまたは警告が発生するはずです。ただし、g の特定のバージョンではこれが許可され、エラーなしでコードがコンパイルされる場合があります。これは標準の動作ではないため、依存すべきではないことに注意することが重要です。
プログラムを正しく実行し、未定義の動作を回避するには、すべての非 void 関数に return ステートメントを明示的に含めることが重要です。 。潜在的な警告をキャッチし、そのような問題を回避するには、C コードをコンパイルするときに常に -Wall オプションを使用します。
以上がC 関数で return ステートメントを省略すると未定義の動作が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。