C语言宏 使用+调试

830阅读 0评论2011-12-09 马夹GG
分类:

1. #
可以将宏参数当成字符串。
#define TOSTRING(arg) (#arg)
printf("%s\n%s\n", TOSTRING(abc), TOSTRING(123));

结果:
abc
123

2. ##
可以将宏参数进行连接,但是最后产生一个C语言符号,而不是字符串。
#define CONNECTSTR(str1, str2) (final_string_##str1##_##str2)
CONNECTSTR(hello, world) 产生符号 final_string_hello_world

3. 宏展开
一般情况下,宏参数如果是一个宏的话,会首先将宏参数展开。
但是如果宏中有#或者##的话,就不会展开。

4. 调试宏
#define TOSTRING(arg) (#arg)
#define MACRO_DBG(arg) TOSTRING(arg)
#define ADD(a, b) ((a)+(b))

printf("%s\n", MACRO_DBG(ADD(1, 2)));
结果:
((1)+(2))

5.宏变参
#define yourerr(fmt, ...) \
    printf("[%s][%s][%d]: ", __FILE__ ,__func__, __LINE__);\
    printf(fmt, __VA_ARGS__)
上一篇:bochs2.11下编译linux0.11
下一篇:页面访问量统计实例