数を稼ぎます(自虐)
いや結構知らないオプション多い
-Wshadow
shadowing、つまり以前に使用されてる変数を隠す箇所を警告してくれる。
#include<stdio.h> int main() { int a = 0; for(int i=0; i<1; i++) { int a = 100; printf("%d\n", a); } printf("%d\n", a); return 0; }
781469572/source.cpp:7:13: error: declaration of ‘a’ shadows a previous local [-Werror=shadow] int a = 100; ^ 781469572/source.cpp:4:9: note: shadowed declaration is here int a = 0;
稀にこれが不具合の原因になってるところを目撃するので、結構有用な気がする。WallやWextraには含まれてないのがちょっと意外でした。
ちなみに、gccのdocによるとチェックの範囲が幾つか選べるらしい。
デフォルトでは-Wshadow=globalで、これだと警告され過ぎる場合があるとか。上の例はローカルスコープ?をチェックしたいので-Wshadow=localだけでも良い。
静的解析ツールでも見つけてくれそうだけど、警告レベルが低いとそのままになってたりしそうで、覚えておくと役に立つ場合があるかも。
おわり