非调试配置中未使用的var

时间:2012-11-23 23:13:42

标签: c dry

我经常写这样的代码:

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

假设assert()定义如下:

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

第一段代码会发出关于'结果'是未使用的var的警告。

我可以这样做:

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

但这对我来说似乎并不干......

我还能做什么?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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);

答案 2 :(得分:0)

空格和换行符与编译器无关,所以......

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

答案 3 :(得分: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时忽略错误吗?