ホームページ >バックエンド開発 >C++ >C 関数に戻り値がない場合はどうなりますか?

C 関数に戻り値がない場合はどうなりますか?

DDD
DDDオリジナル
2024-11-15 00:32:02182ブラウズ

What Happens When a C   Function Lacks a Return Value?

戻り値が欠落している関数: ランタイム動作の調査

void 以外の関数に return ステートメントがないため、動作に関する懸念が生じます実行時のプログラムの。 VisualStudio 2008 は、次のコードの戻り値が欠落していることを適切に警告します:

int doSomethingWith(int value)
{
    int returnValue = 3;
    bool condition = false;

    if(condition)
        // returnValue += value; // DOH

    return returnValue;
}

int main(int argc, char* argv[])
{
    int foo = 10;
    int result = doSomethingWith(foo);
    return 0;
}

警告にもかかわらず、プログラムはコンパイルされて実行されます。ただし、'doSomethingWith' 関数の戻り値は期待されるものではありません。

未定義の動作ですか?

ISO C 標準として (セクション 6.6. 3) ステートメント:

「関数の終わりからのフローは、値のない戻りと同等です。この結果は、値を返す関数の未定義の動作です。"

これは、プログラムの動作が予測できないことを意味します。この特定のインスタンスでは、戻り値は 0 に設定されます。

結果の値はどのように計算されますか?

関数が明示的に値を返さない場合、コンパイラはコンテキストに基づいて戻り値の型を決定しようとします。この場合、関数は「int」を返すように宣言されているため、コンパイラは戻り値を 0 に初期化します。

非 POD データ型では何が起こりますか?

非 POD データ型の戻り値が欠落している関数の動作はさらに予測不可能です。明示的に初期化しないと、コンパイラはデフォルト値を想定できず、戻り値はガベージ データになる可能性があります。

結論

一方、提供された例のプログラムは何もしなくても実行できます。顕著な問題があるため、未定義の動作に依存することは決してお勧めできません。微妙でデバッグが難しい問題が発生する可能性があります。すべての非 void 関数には、適切な戻り値を設定する明示的な return ステートメントがあることを常に確認してください。

以上がC 関数に戻り値がない場合はどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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