我经常写这样的代码:
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)
但这对我来说似乎并不干......
我还能做什么?
答案 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时忽略错误吗?