Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42861
  • 博文数量: 15
  • 博客积分: 66
  • 博客等级: 民兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-09 00:22
文章分类
文章存档

2012年(10)

2011年(5)

我的朋友
最近访客

分类:

2011-12-09 00:32:36

原文地址:C语言宏 使用+调试 作者:ville_lee

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__)
阅读(815) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~