ホームページ >バックエンド開発 >C++ >戻り値の型を宣言しているにもかかわらず、C 関数が明示的な return ステートメントなしでコンパイルされるのはなぜですか?

戻り値の型を宣言しているにもかかわらず、C 関数が明示的な return ステートメントなしでコンパイルされるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-13 04:41:15805ブラウズ

Why Does a C   Function Compile Without an Explicit Return Statement Despite Declaring a Return Type?

戻り値がないにもかかわらず、この C スニペットはコンパイルされるのはなぜですか?

提供されたコード スニペット内:

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

関数 Min は tvec4 を返すように宣言されていますが、コードでは明示的な return ステートメントが提供されていません。これにより、コンパイラがなぜエラーなしでコードをコンパイルするのかという疑問が生じます。

未定義の動作

C 11 ドラフト標準によると、値の末尾から流れ出す-戻り値を提供せずに関数を返すと、未定義の動作が発生します。これは、そのような場合にコンパイラがエラーや警告を発行する義務がないことを意味します。

コンパイラ オプション

ただし、警告を発したり、エラーを生成したりするようにコンパイラを設定することもできます。未定義の動作の場合。たとえば、-Wall フラグを使用すると、次のような警告がトリガーされることがあります。

warning: control reaches end of non-void function [-Wreturn-type]

-Werror=return-type フラグを追加すると、コンパイラはこの警告をエラーとして扱い、コードを強制的に次のように処理します。

Visual Studio

Visual Studio では、コードでエラーが生成されます。デフォルトでは C4716:

error C4716: 'Min' : must return a value

すべてのコード パスが値を返さない場合、Visual Studio は警告 (C4715) を発行します。

以上が戻り値の型を宣言しているにもかかわらず、C 関数が明示的な return ステートメントなしでコンパイルされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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