拓展:
typeof通常被用在复杂宏的语句表达式中,下面的例子,用来说明如何使用typeof来获取宏参数的类型,并且安全地让宏参数只运行一遍:
使用带下划线的局部变量名字是为了避免跟本语句中所要替换的a和b冲突。
更多关于typeof的例子:
1,定义一个变量,类型跟x指向的数据相同
typeof (*x) y;
2,定义一个数组,元素的类型跟x指向的数据相同
typeof(*x) y[4];
3,定义一个数组,元素的类型是char *
typeof( typeof( (char *)[4] ) ) y;
使用typeof声明来写以下这两个宏:
#define pointer(T) typeof(T *) #define array(T, N) typeof(T [N])
现在可以这样定义变量:
array (pointer (char), 4) y;
y是一个包含4个指向char型数据的指针的数组。
温馨提示:以上技能基本没什么卵用。下面
最后,在gcc中你还可以使用 __auto_type 来取代 typeof,此外 __auto_type 声明语句只能声明一个变量,而且必须带初始化值,变量的类型取决于初始化的数据的类型,变量的作用域从初始化之后开始。使用 __aotu_type 的宏MAX()改写后是这样的:
#define MAX(a, b) \
({
__auto_type _a = (a); \
__auto_type _b = (b); \
_a > _b ? _a : _b; \
})
使用 __auto_type 的好处是: