2012-02-16 6 views
0

可能性の重複:
Why can you return from a non-void function without returning a value without producing a compiler error?なぜこのC++はコンパイルされますか?

なぜgcc 4.6.1は、returnステートメントなしで次の関数をコンパイルするのですか?

uint32_t& siof_solution() { 
    static uint32_t example = (uint32_t) 7; // Doesn't really matter 
    // return example; 
} 

1を返します。 私はそれを見たことがありません

+2

ねえ、それはあなたに警告を与えます、それは十分ではありませんか?警告時にコンパイルを停止するスイッチがありました... – Griwes

+0

Visual C++コンパイラでも同様のケースが見られました。関数が戻り値で宣言されたところで、私はreturn文を置くのを忘れて、何とかコンパイルして値を返しました!私の場合、戻り値は真実と解釈されたゴミでした。理由は分かりません。 – Nerdtron

+2

**常に**すべての警告を有効にしてコンパイルしてください。すべての警告でコンパイルしようとするまで投稿しないでください。 –

答えて

9

C++関数は、たとえそれらがそうであっても値を返す必要はありません。一致しない場合、結果は未定義の動作です。あなたのケースでは、Sheer Dumb Luckを通じて、コードは機能しているように見えますが、移植性が低く安全ではありません。これはクラッシュしたり、ガベージ・ポインタを返したり、デバッグ・エラーを引き起こしたりする可能性があります。

私はこの決定の理由はCとほとんどの下位互換性があると思いますが、わかりません。

希望すると便利です。

+0

「Sheer Dumb Luck」はここでの重要なフレーズです。 – peterchen

0

何らかの理由で返品確認がオフになっています。私はそれがC++で必要とされているかどうか覚えていません。あなたのケースで返される値はメモリガーベッジです。

関連する問題