私が何年も前に気付いて以来、これはデフォルトではエラーを生成しない(少なくともGCCでは)ことを知っているので、私はいつもその理由を疑問に思っていましたか?
コンパイラフラグを発行して警告を生成できることを理解しましたが、常にエラーである必要はありませんか?非void関数が値を返さないのが有効であることはなぜ意味があるのですか?
コメントでリクエストされた例:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
...コンパイルします。
-Werror=return-type
その警告だけをエラーとして扱います。私は警告を無視しただけであり、無効なthis
ポインタを追跡する欲求不満の数分間が私をここに導き、この結論に導きました。
std::optional
関数の最後を返さずに終了すると「真の」オプションが返されるという事実によってさらに悪化します