スレッドメモ
MLやNewsのスレッドをメモする試み。
2003-07-23 (水)
◆ [fj][fj.comp.lang.c] デバッグ文(可変引数マクロ)C99 仕様
<3988628news.pl@insigna.ie.u-ryukyu.ac.jp> Shinji KONO (7/23)
最近、読んだ本 Writing Solid Code にもassert を多用し、出荷時には消す」みたいな話が載ってましたが、根本的に間違っているんじゃないかな。
<bfor0m$b76$1@bgsv5648.tk.mesh.ad.jp> tabe (7/24)
しかし、
・原子力発電所の制御
・航空機の制御、
・自動車エンジンの制御等で、assertを有効にして出荷する事が、良い事なのか、悪い事なのか、私にはわかりません。
<m3u19bx54f.fsf@maedapc.cc.tsukuba.ac.jp> MAEDA Atusi (7/25)
無ければ,何が起こるか分からない.バグの記録も残らない.チェックが入れてあれば,少なくとも記録は(たとえばNVRAMに)とれるし,うまくすればフェイルセイフ処理を試みることもできるでしょう.
<bfpisc$d7$1@bgsv5648.tk.mesh.ad.jp> tabe (7/25)
コンパイラ提供の、assert() と、単なるデバッグプリント文を明確に分けて考えてください。assert() は、プログラムが即死します。
<m3ptjzwf2c.fsf@maedapc.cc.tsukuba.ac.jp> MAEDA Atusi (7/25)
#むかっっ
元々SNAPという「単なるデバッグプリント」マクロの話だったのではないですか.なんで偉そうに説教されなきゃならんのか.
簡便なassertは便利な場合も多いですが,自ずと限界があります.ケースバイケースとしか言いようがないでしょう.
<3988646news.pl@insigna.ie.u-ryukyu.ac.jp> Shinji KONO (7/25)
というわけで、僕の立場は、
エラー処理をしないことが前提のassertは、製品化しないようなプログラム(あるいは、マイクロソフトの売ったら勝ち、バグは知らん方針)が前提であり、時代遅れであって、使ってはいけないものだ。
ってなもんです。
マイクロソフト製品は、WindowsUpdateという機能でバグ修正が行われていますよ。<br><br><br>リリース時には消えるのがアサートなので、止まるアサートは混ざりません。<br>デバッグプリント、エラーメッセージとは明示的に分けるのは必須ですね。