GNU C常用扩展:typeof及语句表达式

2458阅读 0评论2011-12-15 大隐隐于床
分类:LINUX

GNU C常用扩展:typeof及语句表达式 及 例程。
 
一、typeof,扩展关键字 
  1. int a = 1;
  2. typeof(a) b = 2;
  1. #define SWAP(a, b) \
  2.     typeof(a) _tmp = a; \
  3.     a = b; \
  4.     b = _tmp;
 
二、语句表达式
    用 ({ ... }) 包括起来的就是“语句表达式”。  { ... } 表示一个“语句块”,加上 () 括起来表示“语句表达式”。
  “语句表达式”同“语句块”相同,可以使用循环、判断、局部变量。
   不同点在于:“语句表达式”有值。类似于“逗号表达式”,整个表达式的值 = 最后一个语句的值。
  1. int d = ({int x = 10; int y = 20; x > y ? x : y;});
  2. /* result: d = 20 */
 
三、例子,一个带返回值的宏。
以下这个宏的作用是:根据结构成员指针,返回结构体本身的指针。
  1. //_ptr  : 指向结构体成员的指针
  2. //_stru : 结构体
  3. //_nofs : 结构体成员名

  4. #define GET_STRUCT(_ptr, _stru, _nofs) \
  5.     ({(_stru *)( (unsigned char *)_ptr - (unsigned int)(&((_stru *)0)->_nofs));})
使用例子
  1. struct STU
  2. {
  3.     int i;
  4.     char a[24];
  5. };
  6. ...
  7. ...
  8. struct STU s = {10, "aaa"};
  9. int *p = &s.i;
  10. struct STU *off = GET_STRUCT(p, struct STU, i);
  11. printf("%s\n", off->a);

  12. /* result: aaa */
 
 
 
上一篇:包捕获及包分析之三:使用pf_ring提高包捕获效率
下一篇:Linux C程序存储空间的逻辑布局