GNU C扩展-typeof

    GUN C提供了一不少扩展(参考C-Extensions),其中就包括了typeof(),其作用类似于C++11 里的 decltype 操作符,可以取得变量或表达式的类型。

    几个比较有意思的使用typeof()的方式:

    1、用于定义函数指针类型的变量

int func(int a);

typeof(func)* func_ptr;

    2、通过typeof()定义用于接收函数返回值的变量

int func(int a);

typeof(func(0)) b;

b = func(0);

    3、实现安全的max、min宏(linux-2.6.7 内核源码中就有这样的使用方式)

#define min(x,y) ({ \

    typeof(x) _x = (x); \

    typeof(y) _y = (y); \

    (void) (&_x == &_y); \

    _x < _y ? _x : _y; })

#define max(x,y) ({ \

    typeof(x) _x = (x); \

    typeof(y) _y = (y); \

    (void) (&_x == &_y); \

    _x > _y ? _x : _y; })

    同时在使用时也必须要注意其使用上的一些限制和注意项:

  1. typeof构造中的类型名不允许包含存储类说明符(extern、static)、允许包含类型限定符(const、volatile)。
  2. typeof是gnu c的扩展,标准c并不包含该关键字,所以编译时需要选定gnu 标准(如:-std=gnu90)进行编译。
  3. 通常如果要兼容标准c,就要用__typeof__
  4. 通常能用typedef的地方就可用typeof

你可能感兴趣的:(C语言,学习日记,gnu,c语言,typeof)