zoukankan      html  css  js  c++  java
  • do{} while(0)宏定义

    #define SAFE_FREE(p) do { free(p); p = NULL;} while(0)

    一般情况下我们会写成:

    #define SAFE_FREE(p) { free(p); p = NULL;}

    #include <stdio.h>
    #include <stdlib.h>
    
    #define SAFE_FREE(p) {free(p); p = NULL;}
    
    int main(int argc, char *argv[])
    {
        int* ptr = (int*)malloc(sizeof(int) * 4);
    
        // error C2181: 没有匹配 if 的非法 else
        if (NULL != ptr)
            SAFE_FREE(ptr);
        else
            printf("Has already free!\n");
    
        return 0;
    }

    如下定义则正确:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define SAFE_FREE(p) do{free(p); p = NULL;} while(0)
    
    int main(int argc, char *argv[])
    {
        int* ptr = (int*)malloc(sizeof(int) * 4);
    
        if (NULL != ptr)
            SAFE_FREE(ptr);
        else
            printf("Has already free!\n");
    
        return 0;
    }

    如果宏函数过大,定义成多行:

    #define SAFE_FREE(p) \
    do\
    {\
        free(p);\
        p = NULL;\
    }\
    while(0)
  • 相关阅读:
    钟国晨160809323(作业5)
    12
    11
    第九次
    8作业
    第七次作业
    6
    林昊5
    计算机网络原理与应用笔记 3/29
    计算机网络原理与应用笔记 3/22
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3063786.html
Copyright © 2011-2022 走看看