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

是否有可能使
gcc处理C的未使用值警告,就像g为C处理它们?有关p&& amp; * P;在C中,有一个警告,但不是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; }
                    ^

最佳答案 您可以通过将它们转换为void来手动删除它们.

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

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

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

点赞