如何巧妙运用typeof关键字进行类型检测?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1930个文字,预计阅读时间需要8分钟。
ANSI+C语言定义了sizeof关键字,用来获取一个变量或数据类型在内存中所占的字节数。GNU扩展了typeof关键字,用来获取一个变量或表达式的类型。以下是一个简化的例子:
cint i; // 变量i的类型是inttypeof(i) j=20; // j的类型是inttypeof(*i) a; // a的类型是int
ANSI C定义了sizeof关键字,用来获取一个变量和数据类型在内存中所占的存储字节数。GNU 扩展了一个关键字,typeof用来获取一个变量或表达式的类型。
int i;typeof(i) j = 20;
typeof(int *) a;
int f();
typeof(f()) k;
在上面的代码中,因为变量i的类型为int,所以typeof(i)就等于int,typeof(i) j = 20就相当于int j = 20;typeof(int *) a;就相当于int * a;函数也是有类型的,函数的类型就是其返回值类型,所以typeof(f()) k;就相当于int k;。
typeof( typeof(int *)[5] ) a; //相当于int * a[5];typeof( int x[5]) y; //相当于int y[5];
完美MAX(a,b)宏的诞生
在之前黑鸟的文章中,有提到过如何定义一个适用不同类型且无副作用的MAX宏。
本文共计1930个文字,预计阅读时间需要8分钟。
ANSI+C语言定义了sizeof关键字,用来获取一个变量或数据类型在内存中所占的字节数。GNU扩展了typeof关键字,用来获取一个变量或表达式的类型。以下是一个简化的例子:
cint i; // 变量i的类型是inttypeof(i) j=20; // j的类型是inttypeof(*i) a; // a的类型是int
ANSI C定义了sizeof关键字,用来获取一个变量和数据类型在内存中所占的存储字节数。GNU 扩展了一个关键字,typeof用来获取一个变量或表达式的类型。
int i;typeof(i) j = 20;
typeof(int *) a;
int f();
typeof(f()) k;
在上面的代码中,因为变量i的类型为int,所以typeof(i)就等于int,typeof(i) j = 20就相当于int j = 20;typeof(int *) a;就相当于int * a;函数也是有类型的,函数的类型就是其返回值类型,所以typeof(f()) k;就相当于int k;。
typeof( typeof(int *)[5] ) a; //相当于int * a[5];typeof( int x[5]) y; //相当于int y[5];
完美MAX(a,b)宏的诞生
在之前黑鸟的文章中,有提到过如何定义一个适用不同类型且无副作用的MAX宏。

