比較運算符的順序有差異嗎?if(CONST ==變量)或if(變量== CONST)有什麼區別?
#define CONST_VALUE 5
int variable;
...
if (variable == CONST_VALUE) // Method 1
...
OR
if (CONST_VALUE == variable) // Method 2
...
這是簡單的偏好問題還是有一個特定的比較訂單令人信服的理由?
比較運算符的順序有差異嗎?if(CONST ==變量)或if(變量== CONST)有什麼區別?
#define CONST_VALUE 5
int variable;
...
if (variable == CONST_VALUE) // Method 1
...
OR
if (CONST_VALUE == variable) // Method 2
...
這是簡單的偏好問題還是有一個特定的比較訂單令人信服的理由?
有些人使用方法2的原因是,如果您錯誤地輸入a =來代替==,那麼您會得到編譯器錯誤。然而,你會有人(像我一樣)仍然會使用方法1,因爲他們發現它更具可讀性,如果出現錯誤,它將在測試過程中被檢測到(或者在某些情況下,代碼)。
告訴我,你有沒有犯過這樣的錯誤,以這種方式編寫它會陷入困境?我把它寫成「方法1」,因爲它更具可讀性,並且我敢肯定,在編寫C和C類語言的25年中,我從未*寫過=而不是==。 – 2009-10-26 18:48:24
它發生在我身上。考慮你自己的幸運。 – 2009-10-26 18:50:24
@ Paul Tomblin:多年來至少有三次,我已經在if(或while)語句中進行了一項任務,並且在進行比較的時候已經確定了長期存在的錯誤。也就是說,我還應該指出,如果某個編譯器(特別是gcc)包含* only *一個賦值(無比較),那麼它會/將發出警告,除非包含在一組額外的括號內。儘管如此,首先保證與所有編譯器一起工作。 – 2009-10-26 18:54:35
唯一的區別是,(CONST_VALUE ==變量)使得共用錯字(CONST_VALUE =可變)不可能進行編譯。
相比之下,如果(變量= CONST_VALUE)將導致編譯器想你的意思是分配給CONST_VALUE「變量」。
的=/==混亂是錯誤的在C很常見的來源,這就是爲什麼人們都試圖解決這個問題用編碼約定。
當然,如果您比較兩個變量,這並不會節省您的時間。
而且這個問題似乎是How to check for equals? (0 == i) or (i == 0)
重複,這裏的一些詳細信息:http://cwe.mitre.org/data/definitions/481.html
正如其他人所提到的,CONST_VALUE ==變量避免錯字=。
我還是做了「可變== CONST_VALUE」,因爲我覺得它更具可讀性,當我看到這樣的:
if(false == somevariable)
我的血壓上升。
的第一變型
if (variable == CONST_VALUE)
是較好的,因爲它是更具有可讀性。它遵循變化最大的價值第一的約定(也用於數學)。
第二個變量
if (CONST_VALUE == variable)
被一些人以防止平等與分配
if (CONST_VALUE = variable)
有更好的方法來實現,例如啓用和採取謹慎檢查的mixup的編譯器警告。
其他人已經指出了原因。 =/==混亂。我更喜歡第一個版本,因爲它更接近思考過程。一些編譯器緩解混亂=和==給予警告,當它遇到類似
if(a=b)
在這種情況下,如果你真正想做的事你不得不寫分配
if((a=b))
我會這樣寫
if((a=b) != 0)
爲了避免混淆。
這就是說,我們在我們的代碼中有1個案例,其中我們有一個=/==混淆,反過來寫它不會有幫助,因爲它是增值稅之間的比較。
在GCC中,該選項是-Wparentheses – Adisak 2009-10-27 01:37:13
請參閱http://stackoverflow.com/questions/283205/what-was-the-most-dangerous-programming-mistake-you-have-made-in-c/283212#283212 – 2009-10-26 19:45:25
相關:[https:///en.wikipedia.org/wiki/Yoda_conditions](https://en.wikipedia.org/wiki/Yoda_conditions) – Boann 2013-11-26 19:12:03