楼主:
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 除错的时候要分步骤才会这样写