cppcheck - duplicateConditionalAssign
以下的程式碼:
在 cppcheck 掃描後會出現 duplicateConditionalAssign,說明它與直接 a = b 邏輯上是相等的。
於是我就好奇了,這兩者跑的 assembly 指令是一樣複雜的嗎?
下圖左邊是不寫 if 而直接 a = b。右邊是有 if 判斷兩者不相等,才 a = b。
紅色是兩個檔案不一樣的地方,就是 if statement 產生的 assembly。
左圖:固定執行二行指令。
右圖:如果 a 與 b 不相等,則會執行四行指令。如果 a 與 b 相等,則會執行二行指令。
所以,cppcheck 會指出問題代表,直接 assign 比較快。但實際應用上,不等於之後通常會再做其它事情,做有 if 的寫法比較常見。
但至少我們可以記住,單純 if 判斷值不相等,再給值,其實沒有比較快。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int main() | |
{ | |
int a = 2; | |
int b = 3; | |
if (a != b) | |
a = b; | |
} |
於是我就好奇了,這兩者跑的 assembly 指令是一樣複雜的嗎?
下圖左邊是不寫 if 而直接 a = b。右邊是有 if 判斷兩者不相等,才 a = b。
紅色是兩個檔案不一樣的地方,就是 if statement 產生的 assembly。
左圖:固定執行二行指令。
右圖:如果 a 與 b 不相等,則會執行四行指令。如果 a 與 b 相等,則會執行二行指令。
所以,cppcheck 會指出問題代表,直接 assign 比較快。但實際應用上,不等於之後通常會再做其它事情,做有 if 的寫法比較常見。
但至少我們可以記住,單純 if 判斷值不相等,再給值,其實沒有比較快。
留言
張貼留言