2009-09-03 9 views
0

私はいくつかのNSAssertやその他のものを使って、私のアプリでより良いデバッグを可能にしたいと思っています。 NSAssertは、アサーションが失敗した場合に出力する文字列を要求します。あなたがその文字列に情報を一括して入力しない限り、どこに行っても大きな混乱を招くことはありません。パラメータを取ることができるマクロを書くには?

私はクラス名、メソッド名などの有用な情報が満載の文字列でNSAssert呼び出しを行うマクロを作成します。しかしもっと重要なのは、私もカスタムのコメントを提供したいのです。このようなマクロを想像:

USEFUL_ASSERT(!FOO = nilを、@「良くなかったこと、本当に」)私はここに関数やメソッドの呼び出しを使用することはできません多くの理由のため

、ので、コンテキストが失われて、どのクラスがその問題を引き起こしたのかを知ることができなかった。それはそのメソッド自体の内部でのみ行うことができるので、[self class]や_cmdのような多くのパラメータを渡す必要がありますが、すべてのものがどこにでも分散されることは望ましくありません。挿入するコードが短ければ短いほど、保守性が向上します。

+1

RTFMでしたか? (通常は私のスタイルではありませんが、*あなたのユーザー名、afterallです) –

+0

man。 TFMはとても巨大なので、私はいつも読んでいます。しかし、私はすべてを通り抜けるまで、さらに6年は必要です。だから、私は自分の学習プロセスをスピードアップしようとしています。 –

答えて

1
#define USEFUL_ASSERT(condition, comment) /*whatever*/ 
+0

いいえ、私はちょうど条件を使用できるかのように見えます、マクロの定義にコメント?それを試みるつもり!完璧。 –

+1

これは可変バインディングではなくテキスト置換であることに注意してください。たとえば、 'USEFUL_ASSERT(++ x == 0、@" It's zero ")'と書くと、 'x'はマクロボディの 'condition' – Chuck

+1

例えば、マクロ本体が 'NSLog(@"%uは真?%@ "、(条件) (@ "%uは本当ですか?%@"、(条件)、(条件)?@ "はい":@ "いいえ") '。ここには2つの '++ x'式があるので、' x'は2回インクリメントされます。 –

2

macro docsをご覧ください。

+0

それには別のFMがあることを知っておきましょう。ありがとう。 –

関連する問題