我正在去除使用在頭文件中聲明的變量的一堆C代碼。無論出於何種原因,我的編譯器都不會警告頭文件中未使用的變量。有什麼選項可以從頭文件中調用未使用的變量。它從C文件中完成。如何從頭文件中獲取未使用的變量警告?
0
A
回答
2
首先,編譯器因此甚至不知道變量是在頭文件還是在.c文件中聲明的 - 預處理器運行後,這是無法區分的。
你通常在頭文件中聲明的是外部引用,即存儲類external
的變量。沒有編譯器我知道警告如果這樣一個變量是未使用的 - 很多系統頭文件聲明這樣的變量,並且如果它會被充斥着警告(errno
或stderr
是值得注意的示例 - 您不希望被警告任何不使用的源文件errno
或stderr
)
編譯器可以針對未使用的static
變量和未使用的函數參數發出警告。這些變量的用法和範圍僅限於當前的編譯單元或函數,「其他人可能會使用它們」,因此警告是有意義的。 extern
變量可以很好地被其他目標文件使用,因爲那些編譯器將不能發出警告 - 但是一個合適的鏈接器會意識到外部符號不會被任何目標文件使用,並從該目標文件中悄悄地移除該變量最終可執行文件 - 無需警告,因爲它可以通過編譯系統修復。
0
對於C編譯器,頭文件(包含)和任何其他C源文件之間沒有區別。
編譯器不必發出有關未使用的全局數據的警告消息,因爲此數據可能被其他軟件使用。
如果您擔心僅在單個對象文件的作用域中使用一段數據,請嘗試在static
關鍵字前加上此數據定義,重新生成並運行您的軟件。如果過了一段時間,一切仍然正常,你肯定知道任何可能的(懶惰)動態鏈接仍然會很樂意釋放你剛剛刪除的全局數據 - 它是真正100%安全的刪除它。
相關問題
- 1. 獲取未使用的變量警告
- 2. 未使用變量警告
- 3. JEXL - 如何獲取未知變量的所有警告消息?
- 4. 如何從Clang 2.9獲得未初始化的變量警告?
- 5. 如何禁用gcc中未使用的變量警告?
- 6. 警告:未使用的變量
- 7. 如何從位於頭文件中的結構獲取變量?
- 8. 如何擺脫Xcode中的「未使用變量」警告?
- 9. 「變量使用未初始化」警告
- 10. Pycharm警告該變量未被使用
- 11. scoped_lock如何避免發出「未使用的變量」警告?
- 12. 爲什麼我會在Eclipse中爲使用的變量獲取「未使用的變量」警告?
- 13. 如何使用帶有「未使用變量」警告的類型常量?
- 14. 如何在minGW中禁用Eclipse中的未使用變量警告?
- 15. 從CMake中的Boost圖庫中禁用未使用的變量警告
- 16. Java中的捕獲塊變量警告
- 17. 爲什麼沒有爲所有變量報告「未使用的變量」警告?
- 18. 警報變量從頭部
- 19. 警告:未使用的變量 'arrPixel'[-Wunused可變]
- 20. XCode 6中未使用的變量警告
- 21. if/else中未使用的變量警告
- 22. iOS中未使用的變量「mystring」警告
- 23. runjags模型中未使用的變量警告
- 24. 如何從javac獲取更多警告?
- 25. 從文本中獲取變量文件
- 26. 如何從中間件獲取變量?
- 27. 如何自動從文件中讀取頭(變量名)在SAS
- 28. WebStorm未解決的變量警告
- 29. 在頭文件中使用的變量
- 30. 如何警告在KornShell腳本中使用未設置的變量。
你沒有得到這些,因爲其他C文件可能包含標題並使用變量。如果你想得到那些,你必須暫時將它們移動到C文件中。 – merlin2011
在頭文件中定義變量通常被認爲是不好的做法 - 您可以*聲明*它,但不應該*定義*它。如果只有*聲明*並且未被使用,那麼編譯器通常沒有警告(它不會做任何事情,但是不花錢)。你確定你真的*定義了*變量嗎?你能舉一些例子嗎? – tofro
除非編譯器能夠看到包含'foo.h'的源文件_all_,否則它不知道是否使用了'foo.h'聲明的對象。聽起來像是鏈接器的工作。 – chux