回答
我不知道有任何編譯器警告,但您可以嘗試使用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
。
如果你堅持這些值,對它進行算術運算或者在那個區域進行任何操作,你最終可能會改變程序的行爲。
如果您真的關心兼容性,那麼始終應該明確地爲枚舉標籤指定值。 – 2016-09-18 21:05:54
當然,但它仍然是可以被忽略的東西,相對容易。 :-) –
更改所有枚舉的名稱(例如,通過在其名稱前添加_
)。編譯。你會得到很多錯誤,因爲它不會找到以前的枚舉名(顯然)。有一點grep
-foo並確保編譯器/編譯系統不會停止第一個錯誤 - 並且您將擁有所有正在使用的枚舉的列表!
至少,我就是這麼做的。
- 1. 查找未使用的枚舉成員
- 2. 枚舉成員
- 3. 關於在C#中查找枚舉成員的問題
- 4. Jave枚舉成員
- 5. c#LDAP的成員資格枚舉
- 6. 枚舉的聯盟成員在C#
- 7. 如何使用SWIG枚舉枚舉成員
- 8. 枚舉結構的成員?
- 9. C++和枚舉和類成員
- 10. C++類枚舉成員變量
- 11. Python枚舉類成員
- 12. 如何從枚舉成員
- 13. 枚舉和指向成員
- 14. 代碼未找到使用枚舉
- 15. 使用枚舉的Hibernate查找表
- 16. 自動生成枚舉查找表
- 17. 形成位圖使用枚舉在c
- 18. 使用類的枚舉(C++)
- 19. 使用類的枚舉(C++)
- 20. 演員詮釋通用枚舉在C#
- 21. Java枚舉找到枚舉
- 22. 由其他成員組成的枚舉(標誌)成員
- 23. 得到的封閉型[枚舉成員?]
- 24. 枚舉成員上的字符串化
- 25. 使用JavaPoet生成枚舉
- 26. 採用枚舉大集C#.NET使用枚舉項目C#
- 27. 資源查找枚舉
- 28. 枚舉與查找表
- 29. 我應該使用枚舉類或查找在C#
- 30. 關於在C中使用枚舉:是否可以改變枚舉成員的值?
編寫一個程序,以您想要的方式創建'enum'定義源,並將其作爲Makefile中的預編譯步驟運行?保存所有構建的日誌並解析它們以獲取相關的編譯錯誤? – alk
您可以編寫一個屏蔽枚舉的腳本,然後重新構建項目,然後在報告編譯錯誤時解除枚舉,然後繼續下一個枚舉。 –
@SouravGhosh:編譯器通常不會告訴您代碼中的冗餘聲明/定義(除了未使用的局部變量)。 –