• 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を行うようにする方法の簡単な実装です。

   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 Png genki on Sun 12 Dec 2010 at 19:53

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry1866
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ