C语言中 typeof()函数的用法

转载 2015年07月08日 21:39:41
前言:

    typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛。


一,说明
    typeof的参数可以是两种形式:表达式类型

    1,表达式的的例子:
        typeof(x[0](1)
        这里假设x是一个函数指针数组,这样就可以得到这个函数返回值的类型了。
        如果将typeof用于表达式,则该表达式不会执行。只会得到该表达式的类型。
        以下示例声明了int类型的var变量,因为表达式foo()是int类型的。由于表达式不会被执行,所以不会调用foo函数。
            extern int foo();
            typeof(foo()) var;

    2,参数的例子:
        typeof(int *) a,b;
            等价于:
            int *a,*b;


二,实例
    1,把y定义成x指向的数据类型:
           typeof(*x) y;
    2,把y定义成x指向数据类型的数组:
           typeof(*x) y[4];
    3,把y定义成一个字符指针数组:
            typeof(typeof(char *)[4] y;
    这与下面的定义等价:
            char *y[4];

    4,typeof(int *) p1,p2; /* Declares two int pointers p1, p2 */
            int *p1, *p2;

    5,typeof(int) *p3,p4;/* Declares int pointer p3 and int p4 */
            int *p3, p4;

    6,typeof(int [10]) a1, a2;/* Declares two arrays of integers */

            int a1[10], a2[10];


    7,定义一个宏返回一个最大值,为避免因为重复调用同一个变量,可以这样     

       把     MAX(x,y)  ((x)>(y)?(x):(y))


       改成   MAX(x,y)   ({   typeof(x) _x=x;\

typeof(x) _y=y;\

_x>_y?_x:_y;\

    })



,局限
    typeof构造中的类型名不能包含存储类说明符,如externstatic。不过允许包含类型限定符,如constvolatile
    例如,下列代码是无效的,因为它在typeof构造中声明了extern:
        typeof(extern int) a;



四,文件参考
    1,http://blog.csdn.net/wslong/article/details/7728811
    2,http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof

typeof关键字是C语言的应用

原文:http://hi.baidu.com/leowang715/blog/item/b0b96d6f972e7dd080cb4a06.html typeof关键字是C语言中的...

详解 GNU C 标准中的 typeof 关键字

如果你是 C++ 程序员,应该接触过 C++11 里的 decltype 操作符,它的作用是自动推导表达式的数据类型,以解决泛型编程中有些类型由模板参数决定而难以(甚至不可能)表示的问题。其实这个特性...

[JS]js中判断变量类型函数typeof的用法汇总

1、作用: typeof 运算符返回一个用来表示表达式的数据类型的字符串。  可能的字符串有:"number"、"string"、"boolean"、"object"、"function" 和 "un...
  • szwangdf
  • szwangdf
  • 2015年01月08日 14:28
  • 17200

C语言中的typeof关键字

typeof关键字是C语言中的一个新扩展。 typeof的参数可以是两种形式:表达式或类型。 下面是使用表达式的的例子:     typeof(x[0](1) 这里假设x是一个函数指针数组,这...

javascript typeof 是个操作符 不是个函数

The typeof operator returns a string indicating the type of the unevaluated operand. type...
  • ISaiSai
  • ISaiSai
  • 2015年08月07日 12:00
  • 551

c语言中typeof关键字

c语言中typeof关键字 下面这两个等效声明,用于声明int类弄的变量a typeof(int) a; typeof('b') a; //相当于获取'b'的类型,定义一个变量a 下面用于...

C语言中的typeof关键字

typeof关键字是C语言中的一个新扩展。 typeof的参数可以是两种形式:表达式或类型。 下面是使用表达式的的例子:     typeof(x[0](1) 这里假设x是一个函数指针数组,这...
  • wslong
  • wslong
  • 2012年07月09日 13:13
  • 9019

C 语言中 typeof 关键字简介

原文:http://hi.baidu.com/leowang715/blog/item/b0b96d6f972e7dd080cb4a06.html typeof关键字是C语言中的一个新扩...

C++ 下 typeof 的实现

现在我们有这样一坨代码:std::vector arr; // ... for(std::vector::iterator iter = arr.begin(); iter != arr.end();...

linux kernel中typeof和container_of的理解

1.typeof引入原因 #define min(x,y) ((x) > (y) ? (y) : (x)) 如果min(x++ , y++),这个宏定义就会有问题 #define min...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言中 typeof()函数的用法
举报原因:
原因补充:

(最多只允许输入30个字)