ホームページ >バックエンド開発 >C++ >値を返さない非 Void C 関数でコンパイラ エラーが発生しないのはなぜですか?

値を返さない非 Void C 関数でコンパイラ エラーが発生しないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-16 08:27:14962ブラウズ

Why Doesn't My Non-Void C   Function Returning No Value Produce a Compiler Error?

C コードでは非 void 関数が値を返さない

質問:

以下の C コードには、値を返さない非 void 関数:

static tvec4 Min(const tvec4& a, const tvec4& b, tvec4& out)
{
    tvec3::Min(a,b,out);
    out.w = min(a.w,b.w);
}

なぜコンパイルされるのかエラーはありませんか?

回答:

この動作は、C 11 ドラフト標準のセクション 6.6.3 段落 2 によれば未定義です。値を返す関数は未定義の動作を引き起こします。

コンパイラの警告とエラー:

  • gcc および clang: -Wall フラグを使用して警告を生成できます (警告: コントロールが非 void 関数 [-Wreturn-type] の終わりに達しました) )。これは、-Werror=return-type フラグを使用してエラーに変換できます。
  • Visual Studio: デフォルトでエラー C4716 ('Min' : 値を返さなければなりません) を生成するか、警告を生成しますC4715 すべてのコード パスがvalue.

影響:

未定義の動作は、プログラムのクラッシュなどの予期しない結果を引き起こす可能性があります。未定義の動作のインスタンスを検出して修正するには、-Wall や -Wextra などのコンパイラ オプションを使用することをお勧めします。

以上が値を返さない非 Void C 関数でコンパイラ エラーが発生しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。