assert_perror - test errnum and abort
最後に <assert.h>
がインクルードされた時にマクロ
NDEBUG
が定義されていた場合、マクロ
assert_perror()
は何のコードも生成せず、したがって全く何もしない。
そうでない場合、マクロ
assert_perror()
は標準エラーにエラーメッセージを表示し、
errnum が 0
でない場合には abort(3)
を呼び出してプログラムを終了させる。
メッセージには、ファイル名、マクロ呼び出しがあった関数名と行番号、
strerror(errnum)
の出力が含まれる。
assert
マクロの目的は、プログラマがプログラム中のバグを探す手助けをすることであり、コーディング間違いがない場合には何が起こることはありえない。
しかしながら、システムコールやライブラリコールの場合、状況がかなり違っていて、
エラーが返されることがありえるし、実際あるだろう。そしてそのような状況でも
テストされるべきである。この場合には、
NDEBUG
を定義することで無効にできる
assert
ではなく、適切なエラー処理コードで対処すべきである。
このマクロは決して使わないこと。