您正在(直接或通过makefile)-Wno-unused-result
使用(我认为)gcc编译器的命令行选项。但是,gcc 不识别该选项,该选项(我再次假设)旨在抑制有关不使用计算结果的警告。使用 gcc 您应该改用 option -Wno-unused-value
。
但是请注意,(与几乎所有警告一样)这是一个有用的警告,不应被抑制或忽略。如果不使用计算的结果,则整个计算可能是多余的,可以省略而没有效果。事实上,编译器可能会将其优化掉,前提是它可以确定它没有副作用。例如
int foo1(double&x) // pass by reference: we can modify caller's argument
{
int r=0;
// do something to x and r
return r;
}
int foo2(double x) // pass by value: make a local copy of argument at caller
{
return foo1(x); // only modifies local variable x
}
void bar(double&x)
{
int i=foo1(x); // modifies x
int j=foo2(x); // does not modify x
// more code, not using i or j
}
这里i
和j
inbar()
都没有使用。foo1()
但是,不允许优化对 away 的调用,因为该调用也会影响x
,而该调用foo2()
没有副作用。因此,为了避免警告,只需忽略未使用的结果并避免不必要的计算
void bar(double&x)
{
foo1(x); // ignoring any value returned by foo1()
// foo2(x) did not affect x, so can be removed
// more code
}