値を返さない関数のコンパイラ許容
C では、非 void 関数は値を返すことが期待されます。ただし、特定のシナリオでは、関数が値を返さないように見える場合があり、その動作について疑問が生じることがあります。
観察された動作
提供されたコード スニペットは、非-void 関数 Min、明示的に値を返しません。代わりに、参照パラメータ out を目的の結果で更新します。
標準準拠
C 11 ドラフト標準に従って、非 void 関数は未定義の動作を構成します。これは、すべての場合において意図を正確に判断するのは難しいため、コンパイラーはエラーや警告を発行する義務がないことを意味します。
コンパイラーの動作
にもかかわらず標準のあいまいさのため、GCC や Clang などの特定のコンパイラは、潜在的な問題を通知する -Wall フラグを使用して警告を発行する場合があります。 -Werror=return-type フラグを利用すると、これらの警告をエラーに変換できます。
Visual Studio の動作
Microsoft Visual Studio では、提供されているコードと同様のコードを実行できます。スニペットはデフォルトでエラー (C4716) を生成し、非 void 関数がvalue.
未定義の動作アラート
未定義の動作に依存することは推奨されないことに注意することが重要です。一部のコンパイラは警告やエラーを出力する場合がありますが、他のコンパイラは単に問題を無視する場合があり、予期せぬまたは誤ったプログラムの実行につながる可能性があります。
以上がC コンパイラが明示的な戻りのない非 void 関数を異なる方法で扱うのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。