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 回答