作者:
haosan (K211)
2021-06-13 18:03:39想請問板上大大下面幾種case
如何寫的可讀性好 又不影響效率呢
1. A=((b+1)<<3)/2 or A=(b<<2)+4
2. A=(longvarname +longvarname2)*varname3;
or
因為同一行太長 所以另外宣告local
int temp= (longvarname +longvarname2);
A=temp*varname3;
又或者把(longvarname +longvarname2)寫成Marco?
3. a=a%b; or While(a>=b) a-=b;
每次出現這些情況
內心都會一陣針扎
好痛苦呀XD
作者:
Lipraxde (Lipraxde)
2021-06-13 18:20:001. 以哪個式子最能表達你的意圖來選,都一樣就選化簡過的。2. 看 temp 有沒有其他意義,有才另外宣告,通常是不使用 macro。3. 左邊我個人是這樣啦
作者:
g0010726 (Kevin)
2021-06-13 19:01:001. 厲害的編譯器optimized後應該差不多2. 可以直接換行就好,c/c++換行不影響3. 迴圈效率應該會慢,modular應該只有一個指令
作者:
Gway (我愛的你 也愛我 好嗎?)
2021-06-13 20:03:001.請用marco naming 請描述意圖 請記得刮號2. 排版即可 longvarname本身描述,一般具備完整的意圖(I.e可讀性較佳)3. 在意速度 選左 ,在意可讀性,麻煩把那一段code 弄懂 用個函數名 取有意義一點
作者:
chuegou (chuegou)
2021-06-13 23:13:001. 選右 原公式註解說明2. 用換行符或直接換行3. 秒選左
1的話沒有絕對 關鍵是你想表達的原意2的話就換行 但你不要去怕用暫存變數會變慢這種十有八九進編譯器都是暫存器做 兩種寫法最後會一樣3的話99.9%的情況是左邊比較快 而且也比較好懂XD其實像+-*/這種的沒有必要去在上面鑽速度的牛角尖啦然後macro是下下解 尤其以可讀性來說 不是非macro不能做的東西不要用macro
作者:
haosan (K211)
2021-06-14 09:25:00大大看法滿一致的 感謝各位大大解答
作者:
testPtt (測試)
2021-06-14 09:29:00不好讀就寫註解
我可以問一下(3右)特意寫成這樣是有什麼特別想法嗎?
作者:
oToToT (å±å©)
2021-06-17 19:19:00樓上,如果 a 不常 >= b 的話應該有機會變比較快吧
作者:
Lipraxde (Lipraxde)
2021-06-18 01:19:00可能一些沒有除法指令的環境,某些比較爛的 compiler、linker 會多生 code 出來,想省 code size 吧?
我覺得3不管哪個都會被編譯器優化成偏向左邊吧,會寫右邊我亂猜可能只有要用gdb 除錯的時候要分步驟才會這樣寫