typeof
不是C语言本身的关键词或运算符(sizeof
是C标准定义的运算符),它是GCC的一个扩展,作用正如其字面意思,用某种已有东西(变量、函数等)的类型去定义新的变量类型。
typeof
通常用于宏定义中,一些示例用法如下:
1 | typeof(var) |
可以看到,typeof()
中可以是任何有类型的东西,变量就是其本身的类型,函数是它返回值的类型。typeof
一般用于声明变量,如:
1 | typeof(a) var; |
不过,这也不是绝对的,从语法上来说,所有可以出现基本类型关键词的地方都可以使用typeof
,比如sizeof(typeof(a))
这样的用法,虽然这里的typeof
是多余的,不过它是符合语法的。
再来看一些高级用法:
1 | int fun(int a); |
可以看到,typeof
还可以用来定义函数指针等,且typeof(int *)a, b
是定义了两个指针变量。
最后指出一些需要注意的问题。typeof()
是在编译时处理的,故其中的表达式在运行时是不会被执行的,比如typeof(fun())
,fun()
函数是不会被执行的,typeof
只是在编译时分析得到了fun()
的返回值而已。typeof
还有一些局限性,其中的变量是不能包含存储类说明符的,如static
、extern
这类都是不行的。