私は、ヘッダーファイルで宣言された変数を使用しているCコードを削除する作業を進めています。私のコンパイラは何らかの理由でヘッダファイルからの未使用変数を警告しません。未使用の変数をヘッダファイルから呼び出すオプションは何ですか?それはCのファイルからそれを行います。ヘッダファイルから未使用の変数警告を取得するには?
答えて
まず、コンパイラは、変数がヘッダファイルまたは.cファイルに宣言されているかどうかを認識していません。 - プリプロセッサが実行された後、これは区別できません。
ヘッダーファイルで通常宣言しているのは、外部参照、つまりストレージクラスexternal
の変数です。そのような変数が使用されていないと警告するコンパイラはありません - システムヘッダファイルの多くがそのような変数を宣言していれば警告が表示されます(errno
またはstderr
が注目に値する例です。 errno
またはstderr
を使用しない任意のソースファイル
未使用のstatic
変数および未使用の関数パラメータについて、コンパイラは警告を発行できます。そのような変数の使用法と適用範囲は、現在のコンパイル単位または関数に限定されており、「他に誰も使用できない可能性がある」ということを警告するのは理にかなっています。 extern
変数は他のオブジェクトファイルでもよく使用できますが、コンパイラは警告を出すことができません。適切なリンカですが、外部のシンボルはオブジェクトファイルで使用されず、その変数を最終実行可能ファイル - コンパイルシステムで修正できるため、警告は必要ありません。
Cコンパイラでは、ヘッダ(インクルード)と他のCソースファイルとの間に違いはありません。
このデータは別のソフトウェアで使用される可能性があるため、コンパイラは未使用のグローバルデータについて警告メッセージを出す必要はありません。
単一オブジェクトファイルの範囲内でのみデータが使用されることが懸念される場合は、このデータ定義にキーワードstatic
を追加して再構築し、ソフトウェアを実行してみてください。すべての機能が正常に動作していて、可能な(怠惰な)動的リンクが、削除したばかりのグローバルデータを失っていないことを確認していれば、削除することは本当に100%安全です。
あなたの最後の提案はおそらく良い考えではありません:同じ '静的'定義( 'static'は*常に*定義)を持つ同じヘッダが15個のソースファイルに含まれている場合、同じ変数の15個のインスタンスがありますあなたのコードに広がっている - それをそのまま残しておくと( 'static'ではなく)、リンカーは複数の定義について不満を持ちます。提案は.cファイルでのみ意味があります。 – tofro
2番目の考えでは、未使用の 'static'sの警告が表示されるので、実際にはその変数を使用しない場所を検出するのに役立ちます。 – tofro
@tofroはい、あなたは正確に正しいです。私に+1を与えてください:) – sqrt163
- 1. Perl XS未使用変数 'Perl___notused'警告
- 2. 未使用の変数警告にエラーがあります
- 3. django:get_or_createで "未使用変数"警告を避ける
- 4. を抑圧未使用変数の警告
- 5. 変数からコンポーネントを使用する場合の警告
- 6. JEXL - 未知の変数に関する警告メッセージを受け取るには?
- 7. 入力中にXcodeの未使用の変数警告をオフにする
- 8. Haskellコードの未使用変数の警告
- 9. Cで未使用の変数のコンパイラ警告を抑制する方法は?
- 10. 警告の値を取得し、PHPで変数にする
- 11. 未使用の静的const変数のすべてではなく、未使用の警告が発生する
- 12. WebStorm未解決変数警告
- 13. Javascript変数は未定義ですが、警告出力変数
- 14. UIViewAutoresizing.flexibleBottomMarginの未使用の警告
- 15. 警告からのグローバル変数警告モジュール
- 16. "未使用のインポート警告"とpylint
- 17. コンパイル警告なしでRDD [Try [T]]からRDDを取得する警告
- 18. 未確認の変換の警告は
- 19. 複数のヘッダファイルとソースファイルを使ってCで変数と関数を整理する際の警告
- 20. 抽象クラスの未使用変数の実装の警告を防ぐ方法
- 21. UIPopoverBackgroundVisualEffectViewの警告を取得する
- 22. 使用ジェネリックはチェック変換の警告
- 23. 未使用出力列のSSIS警告を抑制する
- 24. aif例外テーブルから警告/エラーメッセージを取得する
- 25. メソッドの "未使用"警告を抑制しますが、その中の変数は無効にします
- 26. -Wunused変数警告
- 27. コンソール統合:エラー/警告の数を取得しますか?
- 28. 未使用のマクロの警告を無効にする方法は?
- 29. 警告を受け取らずにリリースを取得する方法は?
- 30. VueJSでコンポーネントを再帰的に使用する場合の警告の取得
他のCファイルにはヘッダーが含まれている可能性があります。それらを取得したい場合は、一時的にCファイルに移動する必要があります。 – merlin2011
ヘッダーファイルで変数を定義するのは、一般的に悪い方法です。*宣言することはできますが、定義するべきではありません。 *宣言されているだけで未使用の場合、コンパイラからの警告は通常ありません(何もしませんが、無料です)。本当に*変数を定義していますか?いくつか例を挙げることができますか? – tofro
コンパイラが 'foo.h'を含むソースファイルを_all_で見ることができない限り、' foo.h'宣言されたオブジェクトが使用されていないかどうかを知ることはできません。リンカーの仕事のように聞こえる。 – chux