T offset = ps->first, prev_offset;
bool first = true;
while (1) {
if (first)
first = false;
else
assert(offset > prev_offset);
pl = l.find_inc(offset);
prev_offset = offset;
if (pl == l.m.end())
break;
while (ps != s.m.end() && ps->first + ps->second <= pl->first)
++ps;
if (ps == s.m.end())
break;
offset = pl->first + pl->second;
if (offset <= ps->first) {
offset = ps->first;
continue;
}
}
//我得到了[-Wunused-but-set-variable]警告&#34; prev_offset&#34;,除了在cout << prev_offset;
之后添加prev_offset = offset;
之外,还有更好的解决方法吗?任何答案都表示赞赏,提前谢谢。
答案 0 :(得分:0)
有几种方法可以解决这个问题。一种是放入一个将变量强制转换为(void)的伪声明。
(void) prev_offset; // this should stop the warning.
另一个是有条件地包含变量,其方式与assert()
根据是否设置NDEBUG
宏有条件地包含其检查的方式类似。
// When you use ASSERT_CODE() the code only appears in debug builds
// the same as the assert() checks. That code is removed in
// release builds.
#ifndef NDEBUG
#define ASSERT_CODE(code) code
#else
#define ASSERT_CODE(code)
#endif
// ...
T offset = ps->first;
ASSERT_CODE(T prev_offset); // give it its own line
bool first = true;
while (1) {
if (first)
first = false;
else
assert(offset > prev_offset);
pl = l.find_inc(offset);
ASSERT_CODE(prev_offset = offset);
if (pl == l.m.end())
break;
while (ps != s.m.end() && ps->first + ps->second <= pl->first)
++ps;
if (ps == s.m.end())
break;
offset = pl->first + pl->second;
if (offset <= ps->first) {
offset = ps->first;
continue;
}
}