noreturnの挙動

参加できなかった午前中の会議のレポートが気になってたけど出た。終わっちゃった会議にケチつけるのは野暮だけれど,noreturnの話がなんかいろいろおかしい。「何の為のnoreturn?」という肝心な点がどっかいってる。

exit等にnoreturn属性を付けてほしい

http://d.hatena.ne.jp/faith_and_brave/20081208

なぜ???? exit()は標準関数なんだから, 返らないのはコンパイラが知っていますよ。
規格でも"The function exit() never returns to its caller."ってなってるし。
exit()にnoreturn属性を付けてほしいという人はいったい「何の為に」付けてほしいのか?

「せめて関数が返る場合に未定義エラーというのはどうにかしてくれ」というコメントに修正することになった

http://d.hatena.ne.jp/faith_and_brave/20081208

関数が返る場合のチェックを強制したら,最適化できない(場合によっては遅くなる)んだからnoreturnの存在意義がなくなるじゃん...(´・ω・`)

例えばnonnullというattributeがあったとして

void f(int *p [[nonnull]]) {
    ....
}

とした場合に, pのnullチェックを挿入しろと言っているようなもんです。それはおかしいでしょう。