CC++,关键字typeof的⽤法
typeof (alternately typeOf or TypeOf) is an operator provided by several programming languages which determines the data type of a given variable. This can be useful when constructing parts of programs that need to accept many types of data but may need to take different action depending on the type of data provided.
上述引⽤摘⾃
Typeof⽤于指定变量的数据类型,该关键字使⽤时的语法类似sizeof,但是其结构在语义上类似于⽤typedef定义的类型名称。
Typeof有两种形式的参数:表达式 或者 类型。
下⾯是使⽤表达式作为参数的例⼦:
typeof(x[0](1))
在此假设x是⼀个函数指针数组;该类型描述的是函数返回值。
下⾯是使⽤类型作为参数的例⼦:
typeof(int *)
在此该类型描述的是⼀个指向int的指针。
如果在⼀个被包含在ISO C程序中的头⽂件中使⽤该关键字,请使⽤__typeof__代替typeof。
typeof可⽤在任何可使⽤typedef的地⽅,例如,可将它⽤在声明,sizeof或typeof内。
typeof在声明中与表达式结合⾮常有⽤,下⾯是⼆者结合⽤来定义⼀个获取最⼤值的“宏“:
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
本地变量使⽤下划线命名是为了避免与表达式中的变量名a和b冲突。
下⾯是⼀些typeof使⽤⽰例:
声明y为x指向的数据类型
typeof(*x) y;
typeof的用法声明y为x指向的数据类型的数组
typeof(*x) y[4];
声明y为字符指针数组
typeof(typeof(char *)[4]) y;
上述声明等价于 char *y[4];
Typeof在linux内中使⽤⼴泛,⽐如,宏container_of⽤于获取包含member的结构体type的地址:
/**
* container_of - cast a member of a structure out to the containing structure *
* @ptr: the pointer to the member.
* @type: the type of the container struct this is embedded in.
* @member: the name of the member within the struct.
*
*/
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论