C语言宏定义 do{ while}(0) ({}) 区别
时间: 2023-11-01 09:15:43 浏览: 98
C语言中宏的定义
`do{ } while(0)` 和 `({ })` 都是 C 语言中常用的宏定义技巧,它们的作用是将多个语句组合成一个单独的语句,以便于在宏中使用。其中,`do{ } while(0)` 通常用于定义多条语句的宏,而 `({ })` 则用于定义单条语句的宏。
具体区别如下:
1. `do{ } while(0)` 宏定义:
该宏定义通常用于将多个语句组合成一个单独的语句,以便在宏定义中使用。例如:
```
#define MY_MACRO \
do { \
/* do something */ \
/* do something else */ \
} while (0)
```
使用 `do{ } while(0)` 的好处是:
- 可以避免一些编译器警告;
- 可以保证该宏定义在使用时,与其他语句一样,只出现在一个语句块中;
- 在使用时,可以像使用普通语句一样使用该宏定义。
2. `({ })` 宏定义:
该宏定义通常用于将单个语句组合成一个单独的语句,以便在宏定义中使用。例如:
```
#define MAX(a, b) \
({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
_a > _b ? _a : _b; \
})
```
使用 `({ })` 的好处是:
- 可以将多个语句组合成一个单独的语句,避免在宏定义中使用分号;
- 可以在宏定义中定义变量。
需要注意的是,使用 `({ })` 宏定义时,需要使用 GCC 兼容的编译器,因为该语法不是标准 C 语言的一部分。
阅读全文