2014-01-16 38 views
0

我讀到Fortran對評估表達式的順序有嚴格的規則。對於某些數值算法,這非常重要。控制C代碼中的操作順序

數值C程序如何控制浮點操作的順序,並防止編譯器「優化」到不合需要的操作順序,例如將(a*b)*c更改爲a*(b*c)

+0

我敢打賭,他們沒有,因爲標準可以防止編譯器重新排序浮點運算,因爲它可以改變程序的行爲。但是需要一個標準的人。 – luk32

+0

如果我理解正確,這對於Fortran來說甚至是正確的:http://stackoverflow.com/questions/13135262/consistent-floating-point-arithmetic-in-fortran-with-different-compilers-on-diff;你在哪裏讀過關於這些嚴格規定的聲明? –

+2

如果您對[標準規則](http://en.cppreference.com/w/c/language/operator_precedence)不滿意,請在圓括號內放置特定表達式。但是一般來說,如果100%可以說子表達式沒有副作用,那麼編譯器只會重新排序。 –

回答

0

使用括號可確保執行順序。

0

我相信它沒有優化代碼,因爲這可能會導致不良結果。它通常採用數字表達式中綴符號,然後通過基於不同運算符的優先級應用堆棧操作將其轉換爲後綴。
這樣做是爲了優化代碼,但通過省略所有括號然後基於優先級重新排列來簡單地提高代碼的可讀性。
priority order