GNU C常用扩展:typeof及语句表达式 及 例程。
一、typeof,扩展关键字
- int a = 1;
- typeof(a) b = 2;
- #define SWAP(a, b) \
- typeof(a) _tmp = a; \
- a = b; \
- b = _tmp;
二、语句表达式
用 ({ ... }) 包括起来的就是“语句表达式”。 { ... } 表示一个“语句块”,加上 () 括起来表示“语句表达式”。
“语句表达式”同“语句块”相同,可以使用循环、判断、局部变量。
不同点在于:“语句表达式”有值。类似于“逗号表达式”,整个表达式的值 = 最后一个语句的值。
- int d = ({int x = 10; int y = 20; x > y ? x : y;});
- /* result: d = 20 */
三、例子,一个带返回值的宏。
以下这个宏的作用是:根据结构成员指针,返回结构体本身的指针。
- //_ptr : 指向结构体成员的指针
- //_stru : 结构体
- //_nofs : 结构体成员名
- #define GET_STRUCT(_ptr, _stru, _nofs) \
- ({(_stru *)( (unsigned char *)_ptr - (unsigned int)(&((_stru *)0)->_nofs));})
使用例子
- struct STU
- {
- int i;
- char a[24];
- };
- ...
- ...
- struct STU s = {10, "aaa"};
- int *p = &s.i;
- struct STU *off = GET_STRUCT(p, struct STU, i);
- printf("%s\n", off->a);
- /* result: aaa */
阅读(885) | 评论(0) | 转发(0) |