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; })
同时在使用时也必须要注意其使用上的一些限制和注意项: