ホームページ > バックエンド開発 > C++ > C g コンパイラが構造体を返すにもかかわらず、Return ステートメントなしで関数をコンパイルするのはなぜですか?

C g コンパイラが構造体を返すにもかかわらず、Return ステートメントなしで関数をコンパイルするのはなぜですか?

Susan Sarandon
リリース: 2024-11-27 03:36:13
オリジナル
851 人が閲覧しました

Why Does My C   g   Compiler Compile a Function Without a Return Statement, Even Though It Returns a Structure?

C での return ステートメントの省略

問題:

開発者が Windows 版の g を使用しているときに予期しない動作が発生しましたStrawberry Perl を通じて取得されます。 g コンパイラでは、関数が構造体を返しているにもかかわらず、void 以外の関数で return ステートメントを省略できます。

詳細な分析:

コード スニペット提供:

struct boundTag Box::getBound(int side) {
    struct boundTag retBoundTag;
    retBoundTag.box = this;
    switch (side)
    {
        // set retBoundTag.bound based on value of "side"
    }
}
ログイン後にコピー

このような非 void 関数では、return ステートメントを省略すると未定義の動作が発生します。 ISO C -98 標準では、次のように指定されています。

関数の終わりから流れることは、値のない戻りと同等です。この結果、値を返す関数で 未定義の動作 が発生します。

警告なしでコンパイルされたのはなぜですか?

return ステートメントを省略すると、未定義になります。の動作のため、一部のコンパイラはデフォルトで警告を発行しない場合があります。より徹底した警告を有効にするには、コンパイル時に -Wall オプションを使用することをお勧めします。

Return ステートメントを省略した結果

非コードで return ステートメントを省略すると、 void 関数は予期しない結果をもたらす可能性があります。関数は初期化されていない値を返したり、プログラムをクラッシュさせる可能性があります。さらに、後続のコードで戻り値を使用すると、予期しない結果が生じる可能性があります。

結論

この場合、g コンパイラでは return ステートメントの省略が許可されていましたが、 ISO C 標準に準拠し、void 以外の関数に return ステートメントを常に含めることが重要です。 return ステートメントを省略すると、未定義の動作や予期しない結果が生じる可能性があります。

以上がC g コンパイラが構造体を返すにもかかわらず、Return ステートメントなしで関数をコンパイルするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート