assertが失敗した場合に任意のコードを実行してからabortを行うようにする方法の簡単な実装です。
1 #define ASSERT(cond) \ 2 for (; !(cond); assert(#cond == false))
- レポートは素のassertに任せています
- condを文字列化してcondが1度だけ評価されるようにします
- falseとの比較でassertが失敗するようにし、レポートの見た目がそれっぽくなるようにします。
使用例:
1 ASSERT(a>0 && a%3 == 0){ 2 printf("Invalid a: %d\n", a); 3 }
出力例:
1 Invalid a: 1 2 Assertion failed: ("a>0 && a%3 == 0" == false), function fooBar, file baz.c, line 123
posted by
genki
on Sun 12 Dec 2010
at 19:53