• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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