懂C语言的朋友应该都知道宏,最近看到一个很有意思的用法,分享给大家。
代码如下:
- #if VERSION < 0x000020
- #define foo_v1 foo
- #define foo_v1_t foo_t
- #endif
- struct foo_v1 {
- int bar;
- };
- typedef struct foo_v1 foo_v1_t;
- struct foo_v2 {
- int bar1;
- int bar2;
- };
- typedef struct foo_v2 foo_v2_t;
如果
VERSION < 0x000020 则上面的代码被展开为:
- struct foo {
- int bar;
- };
- typedef struct foo foo_t;
- struct foo_v2 {
- int bar1;
- int bar2;
- };
- typedef struct foo_v2 foo_v2_t;
否则将被展开为:
- struct foo_v1 {
- int bar;
- };
- typedef struct foo_v1 foo_v1_t;
- struct foo_v2 {
- int bar1;
- int bar2;
- };
- typedef struct foo_v2 foo_v2_t;
由此可以看出这样做的目的是为了兼容不同的版本。这里需要注意的是编译器在预处理阶段会对宏进行替换,其中
struct foo_v1的
foo_v1 也会被替换,这种用法以前很少见到。
阅读(1587) | 评论(0) | 转发(0) |