query: tag:cpp

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 genki on Sun 12 Dec 2010 at 19:43 with 0 comments