変数を宣言する場所をスプリントに無視させる方法を知っていますか?
古い学校の c では、すべての関数の最初に変数を宣言するように指示されていますが、私は悪い人なので、変数を使用する場所の近くで宣言するのが好きです。良い例は int i; です。for(i=0;...) の直前。
非常に簡単な例を見てみましょう
#include <stdio.h>
int main()
{
printf("Hello splint test\n");
int i;
for(i=5;i>0;i--)
{
printf("%2d...\n",i);
}
return 0;
}
ここで、splint とほとんどの古い c コンパイラは int i; を移動したいと考えています。1 行上げるか、宣言と for ループを {} で囲みます。
さて、質問ですが、このチェックをオフにするにはどうすればよいですか? しかし、良い他のチェックを続けますか?
ありがとうヨハン
注 1: 私はすでに gcc 警告 (以下を参照) を防御の最初の行として使用し、valgrind を 2 番目の行として使用しています。しかし、私の愚かさを制御できるもののリストに添え木を追加することを考えています;-)しかし、このチェックはただ面倒です.
私が使用する gcc 警告: -Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
注 2: 私は、その悪い動作から生じる潜在的な移植性の問題について知っています。しかし、読みやすさが向上すると思います。別名、この型オフ宣言を検索するために上下にジャンプする必要がないことは、より価値があります (これについては別のスレッドで説明します)。
更新: もう少し情報を追加します。上記のコードを main.c というファイルに入れました。使用されているプラットフォームは Ubuntu 8.04 で、エディターとして gvim を使用しています。これは、実行したときの splint からの出力です。
splint +gnuextensions main.c
Splint 3.1.1 --- 03 Nov 2006
Command Line: Setting +gnuextensions redundant with current value
main.c:8:8: Parse Error. (For help on parse errors, see splint -help
parseerrors.)
これにより、以前は考えもしなかった 2 つの疑問が生じます。
「現在の値と冗長」、現在の値は?
警告ではなく解析エラーなのはなぜですか?
更新::この問題をサポートするためにスプリントにパッチを適用する可能性があります。これはまだ試していませんが、解決策だと思います。