Warning

最終更新日08 Feb 2018 07:28

Visual Studioの警告設定

警告レベルを変える

プロパティ->C/C++->全般->警告レベル

で変更できます。
デフォルトはLevel3(W3)になってます

VSで特定の警告をエラーとして扱う

Configuration Properties->C/C++->Command Line->Additional Options

私は使用していない変数をエラーとして扱いたい。
C4189のエラー。この場合次のように指定したらうまくいった

/we4189

参照元msdnより

特定の警告を無視する

警告レベルを上げたはいいが、不都合なワーニングが出てしまった場合、
特定の警告を無視することができる
逆に特定の警告を無視したい場合はwd
たとえば警告レベル4にすると出てしまうglmのワーニングをオフにしたい場合

/wd4201

しかしglmのgitでは/Zaオプションの使用という対処方法が紹介されている。

明示的に未使用変数であることを示す

警告レベルを4に上げて未使用変数が無事ひっかかってくれたはいいが、
コールバック関数の引数など、わざと未使用にせざるを得ない変数がある場合もある。
そういう場合はこういうテクニックがある

(void)未使用変数;

何もしないコードだけど、変数を使用しているとみなされ、警告が出なくなる
Why is (void) 0 a no operation in C and C++?

Eclipseのwarning設定

Eclipseではwarning levelがあるとかではなく、一つ一つ項目になっていて、それぞれ

  • Ignore…無視する
  • Warning…黄色い波線で表示
  • Error…赤い波線で表示。これがあるときコンパイルエラーで実行できなくさせる

となっている

私的にいる、要らないwarning 設定

を仕分けしたいと思います。
私的判断基準は、、まず第一に私は3Dグラフィックスプログラマなので、プログラムの安全性よりも実行速度の方を優先します。

つけておいて損はない

  • Value of parameter is not used…..要らない引数をワーニング。コードの可読性があがるしgood! ただし継承しているのは別
  • Unnecessary系全部….これを取り除けば速度も上昇するので、いついかなる場合でもつけておいて損はないと思う。なぜデフォルトでoffになっているのがあるのか。。!?

3Dグラフィックスプログラマ的に要らないワーニング

  • Unqualified access to the field ….thisをつけずにメンバ変数にアクセスする this経由すると遅くなる気がする
  • Non-externalized string literal….ソースコードに直接かかれた文字列をワーニング化 …デバッグLogCat出しの邪魔である。
  • parameter assignment….引数に値を入れようとしたらワーニング。

Unqualified access to the field

thisをつけずにメンバ変数にアクセスするということ。

public class MyClass
{
private int x;
 
MyClass(int w)
{
x = w; // "Unqualified access to the field".
this.x=w;//ワーニングなし
}
}

私的には、、thisは好きじゃないのでちょっとなぁ。先頭のmでメンバ変数であることを明示しているつもりなのだ。

Non-externalized string literal

ソースコードに直接かかれた文字列がワーニングになるというもの。
データはソースコードに含めず、外部のリソースデータ化するべきだ、という考えの元である。
このコメントを追加すると、ワーニングが消える

//$NON-NLS-2$

parameter assignment

引数に値を入れようとしたらワーニング。
しかし、すべての引数に対する代入がワーニングになるわけではない。謎。
私的に超要らない ていうか邪魔。
何のために存在するのかわからない。

Empty block should be documented


warning


ファイル

サポートサイト Wikidot.com warning