码迷,mamicode.com
首页 > 其他好文 > 详细

do{}while0的两个作用

时间:2020-09-21 12:06:28      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:ini   break   return   arm   file   malloc   src   har   语句   

1、作为一种防止宏错误展开的一种防御性写法。
相信很多人都知道,这里不展开了。

2、实现 goto 语句的功能,一次break就可以跳出到后续语句。

do { 
if(...) 
    break; 
... 
}while(0)
// 后续语句

例如:

// https://gitee.com/openharmony/startup_init_lite/blob/master/src/init_read_cfg.c

static char* ReadFileToBuf()
{
    char* buffer = NULL;
    FILE* fd = NULL;
    struct stat fileStat = {0};
    do {
        if (stat(INIT_CONFIGURATION_FILE, &fileStat) != 0 ||
            fileStat.st_size <= 0 || fileStat.st_size > MAX_JSON_FILE_LEN) {
            break;
        }

        fd = fopen(INIT_CONFIGURATION_FILE, "r");
        if (fd == NULL) {
            break;
        }

        buffer = (char*)malloc(fileStat.st_size + 1);
        if (buffer == NULL) {
            break;
        }

        if (fread(buffer, fileStat.st_size, 1, fd) != 1) {
            free(buffer);
            buffer = NULL;
            break;
        }
        buffer[fileStat.st_size] = ‘\0‘;
    } while (0);

    if (fd != NULL) {
        fclose(fd);
        fd = NULL;
    }
    return buffer;
}

do{}while0的两个作用

标签:ini   break   return   arm   file   malloc   src   har   语句   

原文地址:https://www.cnblogs.com/schips/p/13694634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!