12th Sun
block付きassertの簡単な実装(C++)
assertが失敗した場合に任意のコードを実行してからabortを行うようにする方法の簡単な実装です。
c>>
#define ASSERT(cond)
for (; !(cond); assert(#cond == false))
<<--
- レポートは素のassertに任せています
- condを文字列化してcondが1度だけ評価されるようにします
- falseとの比較でassertが失敗するようにし、レポートの見た目がそれっぽくなるようにします。
使用例:
c>>
ASSERT(a>0 && a%3 == 0){
printf("Invalid a: %d\n", a);
}
<<--
出力例:
pre>>
Invalid a: 1
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:43 with 0 comments