未使用的值警告:C vs C ++使用gcc

时间:2016-07-23 09:01:33

标签: c++ c gcc g++

是否可以使 gcc 处理C的未使用值警告,例如像 g ++ 处理C ++一样?对于像C中的p && ++*p;这样的指令,有一个警告,但不是C ++。设置-wno-unused-value并不是一个真正的解决方案,因为它也会删除有用的警告(如下面第2行所示)。例如:

$ (gcc --version|head -1; ls -l qwe.*; cat qwe.x; echo $sep; gcc -c -O2 -Wall qwe.c; echo $sep; g++ -c -O2 -Wall qwe.cc) 2>&1 | sed 's/^/ /'

gcc (Debian 4.9.2-10) 4.9.2
lrwxrwxrwx 1 tml tml    5 Jul 23 10:12 qwe.c -> qwe.x
lrwxrwxrwx 1 tml tml    5 Jul 23 10:12 qwe.cc -> qwe.x
-rw-r--r-- 1 tml tml 1384 Jul 23 10:49 qwe.o
-rw-r--r-- 1 tml tml   55 Jul 23 10:49 qwe.x
void g(int *p) { p && ++*p; }
void f(int *p) { *p+5; }
-------------------------------------------
qwe.c: In function ‘g’:
qwe.c:1:20: warning: value computed is not used [-Wunused-value]
 void g(int *p) { p && ++*p; }
                    ^
qwe.c: In function ‘f’:
qwe.c:2:18: warning: statement with no effect [-Wunused-value]
 void f(int *p) { *p+5; }
                  ^
-------------------------------------------
qwe.cc: In function ‘void f(int*)’:
qwe.cc:2:20: warning: statement has no effect [-Wunused-value]
 void f(int *p) { *p+5; }
                    ^

1 个答案:

答案 0 :(得分:1)

您可以通过将它们转换为无效来手动删除它们。

void f(int *p) { (void)*p+5; }

但是有这些警告的原因。这些实际上并没有做任何事情。这里没有任何副作用发生。因此调用此函数的结果与不调用函数的结果相同。

调用函数f(&x)可能会被合理的编译器完全优化。