2013-02-10 53 views
0

浮點運算有沒有辦法在海灣合作委員會,以激活所有的時候,有一個INT警告 - 浮點運算? 我有一箇舊的代碼有許多算術運算和我注意到,有很多情況下這樣的:激活INT的警告 - 在GCC

int a, b, c; 
double x, y, z; 
y = a + x*b + c/z; 

這是不容易的跟蹤與我的IDE的「搜索」工具,所有這些情況下,因爲代碼是真的很長,神祕而複雜(前面的例子只是爲了弄清楚問題)!所以,我在想,如果有一個「-Wsomenthing」在GCC可用,可以幫我這個苦差事。

加成

我沒有收到任何警告與-Wconversion活躍

+0

你可以嘗試-Wconversion MELT具體問題? – 2013-02-10 11:27:40

+1

我沒有看到上述代碼可能出現的任何問題 - 它將完全按照您的預期進行[假設a,b,c和x,z都已初始化]。你真的想要解決什麼問題? – 2013-02-10 11:32:47

+0

@MatsPetersson我從這段代碼中得到了一些不好的值,我正在代碼中尋找問題。我檢查了所有公式都寫入代碼(我知道代碼背後的數學背景,所以我已經能夠做到這一點)。我注意到,我描述了很多情況,所以我認爲這可能是問題所在。 – 2013-02-10 11:40:45

回答

3

有可能是沒有這樣的方法,但你的問題是GCC的擴展或插件的規範情況。

您可以使用C編碼的插件來擴展GCC(版本4.6或更高版本)。您可以更容易地使用MELT擴展GCC,這是擴展GCC的高級別領域特定語言。

GCC 4.5是可擴展的插件,但該插件的支持是差4.5,在4.6或4.7或好或即將發佈的4.8

如果使用MELT,你可能想使用它的walk_gimple_seq_unique_tree然後將當前的疙瘩與gimple_assign_cast相匹配。

編寫這樣的熔體擴展可能需要您一天以上的時間;問題在於GCC很複雜,你需要部分理解它的內部表示(Gimple)及其通過機制。如果你有一個龐大的代碼庫,定製編譯器仍然是值得的。

請教關於[email protected]

+0

也許搞叮噹([LLVM](http://llvm.org))變得更容易?甚至[稀疏](https://sparse.wiki.kernel.org)? – vonbrand 2013-02-19 18:02:33

+0

我不確定。但你可以嘗試..而且提到的問題明確* gcc * – 2013-02-19 19:25:13

+0

clang和稀疏顯式非常兼容gcc。而且你需要你設置的任何工具來尋找可疑的代碼...... – vonbrand 2013-02-19 19:27:30