typeof关键字是C语言的应用

转载 2016年05月31日 10:19:38

原文:http://hi.baidu.com/leowang715/blog/item/b0b96d6f972e7dd080cb4a06.html


typeof关键字是C语言中的一个新扩展。只要可以接受typedef名称,Sun Studio C 编译器就可以接受带有typeof的结构,包括以下语法类别:

  • 声明
  • 函数声明符中的参数类型链表和返回类型
  • 类型定义
  • 类型操作符s
  • sizeof操作符
  • 复合文字
  • typeof实参

编译器接受带双下划线的关键字:__typeof__typeof__。本文中的例子并没有遵循使用双下划线的惯例。从语句构成上看,typeof关键字后带圆括号,其中包含类型或表达式的名称。这类似于sizeof关键字接受的操作数(与sizeof不同的是,位字段允许作为typeof实参,并被解释为相应的整数类型)。从语义上看,typeof 关键字将用做类型名(typedef名称)并指定类型。

使用typeof的声明示例

下面是两个等效声明,用于声明int类型的变量a

typeof(int) a; /* Specifies variable a which is of the type int */ 
typeof('b') a; /* The same. typeof argument is an expression consisting of 
                    character constant which has the type int */

以下示例用于声明指针和数组。为了进行对比,还给出了不带typeof的等效声明。

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

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

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

int a1[10], a2[10];

如果将typeof用于表达式,则该表达式不会执行。只会得到该表达式的类型。以下示例声明了int类型的var变量,因为表达式foo()int类型的。由于表达式不会被执行,所以不会调用foo函数。

extern int foo();
typeof(foo()) var;

使用typeof的声明限制

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

typeof(extern int) a;

下列代码使用外部链接来声明标识符b是有效的,表示一个int类型的对象。下一个声明也是有效的,它声明了一个使用const限定符的char类型指针,表示指针p不能被修改。

extern typeof(int) b;
typeof(char * const) p = "a";

在宏声明中使用typeof

typeof构造的主要应用是用在宏定义中。可以使用typeof关键字来引用宏参数的类型。

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

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

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

前言:     typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛。 一,说明     typeof的参数可以是两种形式:表达式或类型。     1,...
  • wichace
  • wichace
  • 2015年07月08日 21:39
  • 1275

C语言中的typeof关键字

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

c语言中typeof关键字

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

C语言中将结构体写入文件

可以使用fwrite()将一个结构体写入文件:   fwrite(&some_struct,sizeof somestruct,1,fp); 对应的fread函数可以再把它读出来,此处fwrite...
  • mbshqqb
  • mbshqqb
  • 2016年10月15日 21:58
  • 2313

golang的坑(持续更新中....)

使用golang开发新项目有一段时间了,现在逐渐对go有点失望了,但还好没有绝望。最开始草草翻阅《go语音编程》( 许式伟)时,最让我眼前一亮的其实并不是协程(这个已经听了太多太多…),而是其中对js...

C语言中的typeof关键字

原文地址 http://bbs.chinaunix.net/thread-3595195-1-1.html 另一种引用一个表达式类型的方法就是使用typeof,使用这个关键字的语法看上...

C语言中的typeof关键字

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

c语言typeof关键字(GCC)

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

C语言中的typeof关键字

typeof关键字是C语言中的一种新扩展,返回变量的类型。从本质上讲,它更像是使用typedef定义一个类型名称。typeof的参数可以是两种形式:表达式或类型。 下面是使用表达式的的例子: ty...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:typeof关键字是C语言的应用
举报原因:
原因补充:

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