我想要做的是從類型double或float找到所有顯式類型轉換爲我有的某些源文件中的任何其他類型。有沒有內置的gcc方式來做到這一點? 語言爲C. 謝謝!有沒有辦法讓gcc或clang警告顯式演員?
回答
由於鑄件是明確的法律,並執行怪異的轉換以正確的方式,這是極不可能的,GCC將包含一個選項,以警告他們
相反,這取決於你的來源是如何巨大,你也許能以逃避:
grep '\(double|float\) ' *
給你所有的雙重或浮動變量。由於c不是一種常規語言,因此使用shell工具將其解析爲雙精度或浮點變量列表並不容易,但是如果源足夠小,手動操作就很容易。
grep '([^()]*)[()]*\(your list of variable names\)' *
從那裏會告訴你很多你的演員。
-Wconversion
警告上述可能改變的值(double
大類型),以及關於-Wno-sign-conversion
符號和無符號整數之間的轉換禁用警告的隱式轉換(所以會有較少不必要的警告)。否則我看不出有什麼標準替代...
最壞的情況下,你可以尋找那些關鍵字直接到源文件...
嗯,我覺得沒有這樣的選項。畢竟,編譯器會發出警告,以警告您可能無意中做的事情。然而,明確的轉換基本上是一種告訴編譯器「閉嘴,我知道我在做什麼」的方法。
這不是浮動或雙打,我擔心,它是從浮動和雙打到其他任何東西。我爲所有演員創建了一個列表,但是我需要從列表中提取只有浮動或雙打的變量名稱,這些名稱我很難做到。 – Chris 2012-04-25 15:49:02
哪種類型的演員在這裏有問題?如果他們有問題,爲什麼他們最終在代碼中排名第一? – 2012-04-25 15:53:16
@cli_hlt:存在錯誤的代碼,你知道,需要修復的更好:) – 2012-04-25 16:04:56
如果您的C代碼也可以在C++模式下編譯,您可以使用g ++的-Wold-style-cast
警告標誌來觸發所有這些類型轉換的警告。
您可以確定Clang是否有任何警告,它會通過使用其-Weverything
開關觸發特定的編碼模式(但請注意,這對幾乎任何其他用途都沒有用處 - clang默認禁用了警告在各種形式的合法代碼上)。但是,在這種情況下,鏗鏘聲並沒有任何觸發此類演員的警告。
雖然我知道,編譯器不具有該選項,金培爾的FlexeLint可以做你想做什麼:
$ cat tst.c
int main (void)
{
int i = 0, j = 0;
float f = 0.0;
double d = 0.0;
i = (int) f;
j = (int) d;
d = (double) f;
f = (float) d;
i = (int)j;
j = (unsigned) i;
return (int) j;
}
$ flexelint -w1 +e922 tst.c
FlexeLint for C/C++ (Unix) Vers. 9.00j, Copyright Gimpel Software 1985-2012
--- Module: tst.c (C)
_
i = (int) f;
tst.c 7 Note 922: cast from float to int
_
j = (int) d;
tst.c 8 Note 922: cast from double to int
_
d = (double) f;
tst.c 9 Note 922: cast from float to double
_
f = (float) d;
tst.c 10 Note 922: cast from double to float
shell returned 4
- 1. 有沒有辦法在clang或gcc中使用pragma禁用所有警告?
- 2. 有沒有辦法阻止html警告?
- 3. 有沒有辦法禁用xml警告?
- 4. 有沒有辦法讓非技術人員使用BigQuery報告?
- 5. 只有當沒有錯誤GCC警告
- 6. 有沒有辦法讓facebook標籤只顯示給管理員?
- 7. 有沒有辦法讓Akka-Stream獲得可預測的演員命名?
- 8. gcc和clang警告/錯誤標誌
- 9. NSDictionary和警告關於「沒有演員的整數指針」
- 10. GCC沒有預期的警告
- 11. gcc打印警告沒有編譯
- 12. 類型演員UIView警告
- 13. 有沒有辦法告訴GCC參數的範圍?
- 14. 有沒有辦法告訴gcc從鍵盤上讀取程序?
- 15. 有沒有辦法讓gcc輸出原始二進制文件?
- 16. 禁用所有gcc警告
- 17. 有沒有辦法要求Youtube顯示前貼式廣告?
- 18. 有沒有辦法讓SSRS單元格顯示子報表或表達式?
- 19. 有沒有辦法使用Bootstrap進行衰落警告?
- 20. 有沒有辦法打破Google Chrome中的警告?
- 21. 有沒有辦法關閉drupal 7的警告?
- 22. 有沒有辦法打印log4j警告消息?
- 23. 有沒有辦法禁用vim的交換文件警告?
- 24. 有沒有辦法隱藏PHP的警告不訪問php.ini?
- 25. 有沒有辦法忽略一個FindBugs警告?
- 26. 有沒有辦法在AppCode中隱藏cocoapods中的警告?
- 27. 有沒有辦法在發生第一次警告或錯誤時停止SAS?
- 28. 有沒有辦法從Xcode 4複製/粘貼錯誤或警告消息?
- 29. 有沒有辦法對非蛇情況標識符顯示警告?
- 30. 有沒有辦法阻止在Chrome擴展安裝中顯示警告消息
也許我只是簡單的,但不能你只是搜索'(雙)'或'(float)'在你的源代碼中? – 2012-04-25 15:27:19
@RobertHarvey對不起,我把它改編得更有意義。我想要捕獲所有從float/double類型到其他類型的所有顯式類型轉換,所以我可以搜索(int)等等,但是我無法判斷它們是float還是double。 – Chris 2012-04-25 15:29:52
只是一個想法(我不知道C++或如果它甚至可能):覆蓋鑄造操作符的雙和浮動發出編譯失敗並編譯爲C++ :) – pmg 2012-04-25 15:33:22