Chinaunix首页 | 论坛 | 博客
  • 博客访问: 214368
  • 博文数量: 24
  • 博客积分: 493
  • 博客等级: 下士
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 09:26
个人简介

WangFerry

文章分类

全部博文(24)

文章存档

2012年(8)

2011年(16)

分类: C/C++

2012-08-15 10:36:12

懂C语言的朋友应该都知道宏,最近看到一个很有意思的用法,分享给大家。
代码如下:

  1. #if VERSION < 0x000020
  2. #define foo_v1 foo
  3. #define foo_v1_t foo_t
  4. #endif

  5. struct foo_v1 {
  6.    int bar;
  7. };
  8. typedef struct foo_v1 foo_v1_t;

  9. struct foo_v2 {
  10.    int bar1;
  11.    int bar2;
  12. };
  13. typedef struct foo_v2 foo_v2_t;
如果 VERSION < 0x000020 则上面的代码被展开为:

点击(此处)折叠或打开

  1. struct foo {
  2.    int bar;
  3. };
  4. typedef struct foo foo_t;

  5. struct foo_v2 {
  6.    int bar1;
  7.    int bar2;
  8. };
  9. typedef struct foo_v2 foo_v2_t;
否则将被展开为:

点击(此处)折叠或打开

  1. struct foo_v1 {
  2.    int bar;
  3. };
  4. typedef struct foo_v1 foo_v1_t;

  5. struct foo_v2 {
  6.    int bar1;
  7.    int bar2;
  8. };
  9. typedef struct foo_v2 foo_v2_t;
由此可以看出这样做的目的是为了兼容不同的版本。这里需要注意的是编译器在预处理阶段会对宏进行替换,其中struct foo_v1foo_v1 也会被替换,这种用法以前很少见到。
阅读(1587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~