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__)
阅读(1798) | 评论(2) | 转发(1) |