8 Star 14 Fork 8

OpenHarmony / startup_init_lite

ReadFileToBuf()中使用了无意义的do {}while(0),建议删除

Bug
Backlog
mxs65221447  Opened this issue

该问题是怎么引起的?

RT

重现步骤

报错信息

Attachments
1991804 schips 1590933161 total 3 participants

Comments (2)

1991804 schips 1590933161
Schips 2020-09-19 08:34

do{}while(0)在大型软件开发(Linux内核老trick了)比较常见,是一种防止宏错误展开的一种防御性写法。

而这里是另外一个:不通过goto实现跳转到后续语句 所在的地方。

do { 
if(...) 
    break; 
... 
}while(0)
// 后续语句
Gymee 2020-09-20 11:15

@mxs65221447 建议下次提问题的时候贴上所在行哈,这样方便自己也方便别人

例如https://gitee.com/openharmony/startup_init_lite/blob/master/src/init_read_cfg.c#L37

这里do {}while(0),并非无意义,如果去掉,里面if的break咋办,用return?那岂不是每个分支都得在返回前关闭一下fd,即

fclose(fd);
fd = NULL;

这里的作用,其实和@Schips说的一样,与goto是一样的,只不过我们看到比较多的实现是通过goto来的, 这种用法也没有啥不妥的

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/startup_init_lite.git
git@git.oschina.net:openharmony/startup_init_lite.git
openharmony
startup_init_lite
startup_init_lite

Search