1

私はよく次のようなコードを書きます。

int result = someMethod(arg1,arg2,...);
assert(result==0)

assert() が次のように定義されているとしましょう:

#ifdef DEBUG
#define assert(e) if(!e) printf("something's wrong");
#else
#define assert(...)
#endif

最初のコードでは、「結果」が未使用の変数であるという警告が表示されます。

私は次のようなことができます:

#ifdef DEBUG
    int result = someMethod(arg1,arg2,...);
#else
    someMethod(arg1,arg2,...);
#endif
assert(result==0)

しかし、それは私にはかなり乾燥していないようです...

他に何ができますか?

4

4 に答える 4

4
int result = someMethod(arg1,arg2,...);
assert(result==0);
(void)result;
于 2012-11-23T23:17:15.200 に答える
1

assertion_codeデバッグ構成でのみ特定のコード部分を有効にするようなマクロ。

#if defined(NDEBUG)
#define assertion_code(v)
#else
#define assertion_code(v) v
#endif

今、あなたは書くことができます

assertion_code(int result =) expr();
assert(result == 0);
于 2012-11-23T23:22:26.083 に答える
0

空白と改行はコンパイラには関係ないので...

#ifdef DEBUG
    int result =
#endif
    someMethod(arg1,arg2,...);
assert(result==0)
于 2012-11-23T23:19:38.447 に答える
0

明示的な方法があります:

static inline void debug(const char *msg)
{
#ifdef DEBUG
    printf("%s\n", msg);
#else
    (void)msg;
#endif
}

それで:

if (someMethod(arg1,arg2,...) != 0) {
    debug(message);
}

何か問題が発生した場合、通常どおり続行したくない可能性がかなりあるため、明示的な条件節はとにかく役立つでしょう。または、DEBUG がオフになっているときにエラーを無視する予定でしたか?

于 2012-11-23T23:28:40.267 に答える