zoukankan      html  css  js  c++  java
  • do{}while0的两个作用

    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] = '';
        } while (0);
    
        if (fd != NULL) {
            fclose(fd);
            fd = NULL;
        }
        return buffer;
    }
    
  • 相关阅读:
    大数据
    优化
    gnu
    sed
    hadoop部署
    安装 zookeeper
    ansible
    ssh 配置无密码登录
    未完待续
    解正向代理、反向代理、透明代理
  • 原文地址:https://www.cnblogs.com/schips/p/13694634.html
Copyright © 2011-2022 走看看