未使用の列挙型メンバーを見つける最速の方法は何ですか?Cで未使用の列挙型メンバーを見つける
私は約700人のメンバーを持っていて、使用されていない少数のメンバーを切り捨てたいので、1つずつコメントアウトすることはできません。
未使用の列挙型メンバーを見つける最速の方法は何ですか?Cで未使用の列挙型メンバーを見つける
私は約700人のメンバーを持っていて、使用されていない少数のメンバーを切り捨てたいので、1つずつコメントアウトすることはできません。
私はコンパイラの警告に気づいていませんが、おそらくsplint
スタティックアナライザツールを試すことができます。そのdocumentation(強調鉱山)によると:
スプリントは、定数、関数、パラメータ、変数、型、 列挙子メンバー、および を宣言したが、使用されることはありません構造体または共用体のフィールドを検出します。
私が確認したように、それは意図的に機能します。
#include <stdio.h>
enum Month { JAN, FEB, MAR };
int main()
{
enum Month m1 = JAN;
printf("%d\n", m1);
}
splint
コマンドを実行すると、次のメッセージを取得します::未使用«ここで、比較的危険な用語である»
main.c:3:19: Enum member FEB not used
A member of an enum type is never used. (Use -enummemuse to inhibit warning)
main.c:3:24: Enum member MAR not used
注ここでのコード例です。
typedef enum type_t { VALUE_A, VALUE_B, VALUE_C } type_t;
int main() {
printf("A = %d, ", VALUE_A);
printf("C = %d", VALUE_C);
return 0;
}
はA = 0, C = 2
を印刷しますが、»未使用«VALUE_B
を除去することはA = 0, C = 1
に出力を変更します。
このような値を保持している場合は、その値を算術演算するか、その領域内の何かを実行すると、プログラムの動作が変わる可能性があります。
もしあなたが本当に互換性を気にしたら、とにかく列挙タグに常に明示的に値を割り当てるべきです。 –
もちろん、それはまだ比較的簡単に見落とすことのできるものです。 :-) –
すべての列挙型の名前を変更します(たとえば、名前の前に_
を追加します)。コンパイル。以前の列挙型名(明らかに)が見つからないため、多くのエラーが発生します。 grep
-fooのビットと、最初のエラーでコンパイラ/ビルドシステムが停止しないことを確認してください。使用しているすべてのenumのリストがあります!
少なくとも、私はそれをやる方法です。
'enum'定義を作成したいプログラムを作成し、それをMakefileからプリコンパイルのステップとして実行しますか?すべてのビルドのログを保存し、関連するコンパイルエラーのために解析しますか? – alk
その後、コンパイル・エラーが報告されている場合は、次の列挙型に移行する列挙型マスクを解除、列挙型は、その後、プロジェクトを再構築マスクのスクリプトを書くことができます。 –
@SouravGhosh:通常、コンパイラはコード中の冗長な宣言/定義については教えていません(未使用のローカル変数は例外です)。 –