196 Star 1.1K Fork 419

OpenHarmony / kernel_liteos_a

代码风格改进建议

任务
待办的
sencrypt  Opened this issue

该问题是怎么引起的?

问题1:代码风格整体嵌套比较深,有些地方没有利用c语言的优势,写成了js风格

问题2:switch里面有些地方没有去掉多余的{}

输入图片说明

建议:可以利用c语言的优势,多层嵌套的弱逻辑代码使用方法宏定义的方式写可能更加美观

+1 5
Attachments
8073368 jtttl 1600653436 887732 pulibo 1578934977 7989137 caoruihong 1601432415 total 9 participants

Comments (11)

8073368 jtttl 1600653436
籍他亮 2020-09-21 09:16

问题1:都行吧;
问题2:在“case”里加“{}”是为了声明变量,一些编译器只能在“{}”的开始(栈首)声明变量;

megatops 2020-09-21 17:44

关于问题2:无论是gcc还是clang,你去掉{}在case里面有定义变量的时候都编不过。不信你可以试试。

887732 pulibo 1578934977
做生意又不会 2020-09-21 18:40

这样不是更好看么?
代码多一行又不加工资。
至少Java和JavaScript都是这种风格,看着很舒服啊。。。

weepingtown 2020-09-21 20:15

当前风格没有什么不妥。
你举例的这段代码,唯一能吐槽的,可能是循环的嵌套使用,如果不是为了极限性能,建议把内层循环封装为新的函数。

sencrypt 2020-09-22 11:49

关于问题2:无论是gcc还是clang,你去掉{}在case里面有定义变量的时候都编不过。不信你可以试试。

@megatops

将变量放在switch语句之前定义,而且这个变量既然用了switch,说明还有其他的ipc方式,不然用if这里代码不是更清晰些,这样写给人的感觉嵌套很深,代码会不好看,如果他们有相同的结构体,定义在case之前执行完了再统一调用,那样可能更符合switch的用法把,只是建议而已把,嵌套太多了给人的印象不大好,有些不需要出现括号的地方,感觉尽量还是少出现些可能代码整体风格会更好些,括号的出现对可读性影响还是比较大的(基本上所有的嵌套和括号有关),能避免的地方还是可以尽量避免的把

megatops 2020-09-22 12:06

@megatops
将变量放在switch语句之前定义,而且这个变量既然用了switch,说明还有其他的ipc方式,不然用if这里代码不是更清晰些,这样写给人的感觉嵌套很深,代码会不好看,如果他们有相同的结构体,定义在case之前执行完了再统一调用,那样可能更符合switch的用法把,只是建议而已把,嵌套太多了给人的印象不大好,有些不需要出现括号的地方,感觉尽量还是少出现些可能代码整体风格会更好些,括号的出现对可读性影响还是比较大的(基本上所有的嵌套和括号有关),能避免的地方还是可以尽量避免的把

@sencrypt 这个变量明显和IPC的类型有关,并不适合放在switch之前定义。避免定义不必要的变量,最小化变量作用域,最小化变量生存周期,这都是业界共识的最佳实践,当前这段switch-case的写法都符合。

要说有啥给人影响不太好的,无非是华为的编码规范里面对case也缩进这点给人印象不好罢了。因为case实际上相当于label,并无层次上的缩进关系。但是排版布局上的争议本身就是个holy-war,毫无意义。只要有章法,保持一致,那爱怎么定义爱用哪种缩进方式就是项目所有者说了算,也是他的特权。我虽然很不喜欢这种缩进,我也尊重作者的选择。

+1 3
sencrypt 2020-09-22 12:22

@megatops

嗯嗯,是的,用switch本身其实是为了减少if判断括号的嵌套,这样写的话switch里面反而比if的括号还要多了

7989137 caoruihong 1601432415
Caoruihong 2020-09-23 00:11

ipcInfo这个临时变量可以优化掉,下面函数调用参数ipcInfo直接用它右边那个表达式,这样就不用给这个case加大括号了

bitbegin 2020-09-23 23:25

本来挺好的,你这建议不行

JShao 2020-10-08 21:56

这样写都不知道多好看,清晰明了,有些括号是不能省的,看得更直观

oyouth 2020-10-26 12:47

这风格好,颇具go语言风格,左大括号不另起行。节约,工整,一目了然。

Sign in to comment

Assignees
Labels
Not set
Projects
Milestones
Branches
Planed to start
Not set
Planed to end
Not set
Top level
Priority
C
1
https://git.oschina.net/openharmony/kernel_liteos_a.git
git@git.oschina.net:openharmony/kernel_liteos_a.git
openharmony
kernel_liteos_a
kernel_liteos_a

Search