このメッセージの意味を知っていますが、なぜエラーメッセージではなく、単なる警告なのか疑問に思いました。
この場合はどうなりますか?たとえば、私が関数を持っているとしましょう
int f()
{
}
そして、私がそれを呼ぶとどうなりますか?
この場合、コンパイラは「初期化されていない」の戻りを追加しますint
か?
または、リターンが欠落していると、スタックが破損する可能性がありますか?
それとも(絶対に)未定義の動作ですか?
gcc4.1.2および4.4.3でテスト済み
編集:答えを読む私は一つのことを理解し、コメントを読む-別の..
OK、要約しましょう:それは未定義の振る舞いです。つまり、スタックが破損する可能性があるということですよね?(それは、私のコンピューターがマイクジャックを通して腐ったトマトを私の上に投げ始め、「あなたは何をしましたか?」と叫び始めるかもしれないことを意味します)。
しかし、もしそうなら、なぜここでの一番の答えは、スタックの破損は起こり得ないと同時に、振る舞いは未定義であると言っているのでしょうか?
そして、に関して未定義?「戻り値ではない」を使用しようとする呼び出し元、または値を返す必要がある場合は関数の終わりだけが未定義ですが、そうではありませんか?
または、それは未定義の動作ではなく、値を使用しようとするユーザー(返されません、d'oh!)だけが未定義の値を「受信」しますか?言い換えれば、ごみの価値だけで、それ以上何も起こり得ないのでしょうか?