2016-07-23 11 views
4

gccは、Cのための未使用の値の警告を処理しますのようにg ++はC++を処理しますか? Cのp && ++*p;のような命令については、警告がありますが、C++の警告はありません。 -wno-unused-valueの設定は実際の解決策ではありません。これは、以下の2行目のような有用な警告も削除されるためです。例:あなたが手動で無効にするためにそれらをキャストして、それらを削除することができgccを使ったC対C++

$ (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

* gcc *と* g ++ *は基本的にコンパイル時の警告と同じコンパイラですが、違いはC/C++です。私はこれを反映するために質問を編集しました。あなたが私が遠すぎると感じたら編集をロールバックしてください。 – hyde

+1

@EdHeal問題を示すために、問題のコードはMVCEである可能性が最も高いです。 – hyde

+0

@ marton-l-toth私はテストで何か間違っていると思う。私は私が*テストしたことを理解するまで私のコメントを削除しました... – hvd

答えて

1

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

しかし、これらの警告の理由があります。これらは実際には何もしません。ここで起こっている副作用はありません。したがって、この関数を呼び出す結果は、関数を呼び出さない場合と同じです。

関数f(&x)を呼び出すと、合理的なコンパイラによって完全に最適化される可能性があります。

+2

私は彼らが 'p&& ++*p;'の警告を隠したがっていると思うが、まだ見たい警告の例として '* p + 5'を提供した –

関連する問題