zoukankan      html  css  js  c++  java
  • C语言琐碎记录之#define宏的用法【顺便提提 __FILE__,__LINE__的用法】

    C语言的#define 简而言之 就是 替换你的代码为目标代码的。

    最近我有在用,比如

    #define PRINT_LINE(FP,MSG)    fprintf(FP,"%s:%d %s\n",__FILE__,__LINE__,MSG)

    #define free_safe(EXP) if((EXP)!=NULL && \
    (unsigned int)(EXP)>(unsigned int)0x07000000 && \
    (unsigned int)(EXP)<(unsigned int)0xffffffff ){\
    free((EXP));\
    }else{\
    fprintf(stderr,"%s:%d:ERROR:%s=0x%08x cannot safe to free!!!!!!!\n",__FILE__,__LINE__,#EXP,(unsigned int)(EXP) );\
    }

    对于第一个 又涉及到了__FILE__ 和 __LINE__

    对于第一个我很想做一个msg,...这样传递多参数,或可变参数的宏,但是自己不知如何搞定!现在知道了

    对于第二个 功能是为了先判断,再安全free空间。而且还涉及到了一个技巧! #EXP将表达式 本身字符串打印出来!

    第一个多参数宏:

     #define PRINTF(out, ...) printf(out, ## __VA_ARGS__); fflush(stdout);

    一个##__VA_ARGS__特殊的变量即可

    而#EXP也算是一个特殊的变量。他们都是编译器的buildin支持的变量吧。。。

    __FILE__,__LINE__也是编译器 所内置支持的变量。如同那个 什么__DEBUG__什么的 一样。

    这个很方便,但是当函数传参的话,比较麻烦,希望能够用户不写__FILE,__LINE__也可以使用,所以使用#define伪函数是最好的方法!



    转载请注明出处:http://www.cnblogs.com/ayanmw 多谢

    ------------------------------------------------------------------------------------------------

    一定要专业!本博客定位于 ,C语言,C++语言,Java语言,Android开发和少量的Web开发,之前是做Web开发的,其实就是ASP维护,发现EasyASP这个好框架,对前端后端数据库 都很感觉亲切啊。. linux,总之后台开发多一点。以后也愿意学习 cocos2d-x 游戏客户端的开发。

  • 相关阅读:
    关于session
    bootstrap的栅格系统
    js小知识点
    js获取div基础元素
    fixed固定元素
    定时器之延时触发鼠标悬浮事件
    Comparator分组测试
    List去重比较
    点击事件和双击事件
    开机自启动
  • 原文地址:https://www.cnblogs.com/ayanmw/p/2380507.html
Copyright © 2011-2022 走看看