页首Html代码

返回顶部

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伪函数是最好的方法!



posted @ 2012-03-05 15:28  ayanmw  阅读(2489)  评论(0编辑  收藏  举报

页脚Html代码