I'm using g++ with press level -Wall - Wextra
and treatmenting presss as wrong (-Werror
).
现在,我有时会发现“<> 可变”的错误,可在这一职能中加以使用。
我通过“有时”表示,我有两个独立的汇编单位,这两个单位都包含同一个目录。 一个汇编股没有错误汇编,另一个单位给出了上述错误。
标题档案中的相关法典如下。 由于这一职能相当长,我只转录了下文的相关文字。
确切错误是:
在这项职能中,可使用未开标法
我用以下的<代码>*标明了这一错误。
for (; ;) {
int cmpres; // *
while (b <= c and (cmpres = cmp(b, pivot)) <= 0) {
if (cmpres == 0)
::std::iter_swap(a++, b);
++b;
}
while (c >= b and (cmpres = cmp(c, pivot)) >= 0) {
if (cmpres == 0)
::std::iter_swap(d--, c);
--c;
}
if (b > c) break;
::std::iter_swap(b++, c--);
}
(cmp
is a functor that take two pointers x
and y
and Return —1, 0 or +1 if *x < *y
,x ==*y
or x > *y
。 其他变量是相同的阵列。
这一代码是较大功能的一部分,但可变的<代码>cmpres则使用no where otherwise。 因此, 我不理解为什么会发出这一警告。 此外,汇编者显然understands:cmpres
将永远不会被读成(或至少,它并不总能见上)。
现在我有两个问题:
www.un.org/Depts/DGACM/index_spanish.htm 为什么行为不一致? 这种警告是否由冷漠产生? (由于发出这一警告,需要进行控制流动分析,而这种分析在一般情况下是很难的,不可能总是进行)
Why the warning? Is my code unsafe? I have come to appreciate this particular warning because it has saved me from very hard to detect bugs in other cases – so this is a valid warning, at least sometimes. Is it valid here?