• 一些宏使用总结


    在开发过程中总会有一些的语句经常被用到,对于这些,使用宏定义用起来会更好。

    比如在定位问题时需要打印一些信息时,可能需要定位到打印的文件、函数、行号等等信息,这时候可以做这样一些优化

    #define iprint(fmt, ...)  printf("[%s-%04d] "fmt" ", __FILE__, __LINE__, ##__VA_ARGS__)

    如果要在打印中加入时间等信息,比如精确到毫秒级别,则需要借助do{}while(0)。

    在释放内存时,为了防止野指针出现,可以定义下面的宏

    #define FREE_RES(res)   if (res) free(res), res = NULL

    #define DELETE_RES(res)  if (res) delete res, res = NULL

    注意,free后面是逗号。如果是分号,需要这么写

    #define FREE_RES(res)  do {

                    if (res) {

                      free(res);

                      res = NULL;

                    }

                  }while(0)

    有时候为了方便也把一些常用的函数定义一个宏,有时候只是为了少写些东西,比如memset定义为一个宏

    #define ZERO(dst, size)  memset(dst, 0, size)此外还有如下一些常被定义的宏

    #define ARRAYLEN(arr)  (sizeof(arr)/sizeof(arr[0]))

    #define min(a, b)    (a) > (b) ? (b) : (a)

    #define max(a,b)    (a) > (b) ? (a) : (b)

    #define swap(a, b)    do {

                    x ^= y;

                    y ^= x;

                    x ^= y;

                  }while(0)

    实际项目中,会有比这更多的一些宏定义,总而言之都只是为了简便,便于使用。现在很多观点都认为宏不如inline函数,后者提供安全检查。

    个人认为自己定义的宏必须清除这些宏什么意义,宏的目的是什么,局限性是什么。就跟c与c++谁更好的观点一样,其实他们都是一种工具,

    合适的场景使用合适的工具才是重要的,君子性非异也,善假于物也。

  • 相关阅读:
    Spring mvc配置
    css选择器
    网页全屏背景设计
    2018年的第一篇
    总结2016,规划2017
    Jenkins上Git ssh登陆配置
    Jenkins构建项目,JAVA_HOME is not defined correctly
    运行Jmeter.bat出错:Not able to find java executor or version. Please check your installation. errorlevel=2
    Selenium获取input值的两种方法:WebElement.getAttribute("value")和WebElement.getText()
    Jmeter
  • 原文地址:https://www.cnblogs.com/littlejohnny/p/3272454.html
Copyright © 2020-2023  润新知