typeof关键字简介 -rtti

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关键字来引用宏参数的类型。因此,在没有将类型名明确指定为宏实参的情况下,构造带有所需类型的对象是可能的。

时间: 2025-01-23 00:51:44

typeof关键字简介 -rtti的相关文章

typeof关键字

C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 使用方法 1.当x的类型为是 int 时 _min1变量的数据类型则为 int. 2.当x为一个表达式时(例: x = 3-4), _min1变量的数据类型为这个表达式结果的数据类型. 3. typeof括号中也可以是函数 int function(int, int); typeof(function(1. 2)) val; 此时val的数据类型为 函数function(int, int)返回值的数据类型

转:C语言中的typeof关键字

http://blog.csdn.net/wslong/article/details/7728811 typeof关键字是C语言中的一个新扩展. typeof的参数可以是两种形式:表达式或类型. 下面是使用表达式的的例子: typeof(x[0](1) 这里假设x是一个函数指针数组,这样就可以得到这个函数返回值的类型了. 如果将typeof用于表达式,则该表达式不会执行.只会得到该表达式的类型. 以下示例声明了int类型的var变量,因为表达式foo()是int类型的.由于表达式不会被执行,所

typeof关键字的作用

http://blog.chinaunix.net/uid-28458801-id-4200573.html 一.typeof详解: 前言:    typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛.(其实这和C++的auto关键字和可以推断decltype关键字相当类似) 二.实例: 1,把y定义成x指向的数据类型: typeof(*x) y; 2,把y定义成x指向数据类型的数组: typeof(*x) y[4]; 3,把y定义成一个字符指针数组:        

c语言中typeof关键字

为什么因为一个关键字而专门写一篇随笔呢?因为这个关键字在Linux里面地位非同一般!这个关键字typeof在linux内核里面使用非常广泛! 下面这两个等效声明,用于声明int类弄的变量atypeof(int) a;typeof('b') a; //相当于获取'b'的类型,定义一个变量a 下面用于声明指针和数组typeof(int*) p1,p2;typeof(p1) p2  //p1与p2的类型一致int *p1,*p2; typeof(int [10]) a1,a2;int a1[10],a

C#中使用typeof关键字和GetType()获取类的内部结构(反射机制)

一.问题描述 java有反射机制,C#也有反射机制,在C#中typeof关键字用于获取类型的System.Type对象,该对象的GetMethods()方法可以得到类型中定义的方法对象的计集合,调用方法集合中每个方法对象的GetParameters()可以得到每个方法的参数集合,但是需要引用Reflection命名空间. 获取System.Type对象有两种方法:第一种是用typeof关键字,第二种是用对象引用调用GetType()方法 1.System.Type type =  typeof(

typeof()关键字

typeof是GNU c标准的关键字. typeof()的作用是自动推导出括号中表达式的数据类型. 1 #include <stdio.h> 2 3 void func1(void) 4 { 5 int a = 1; 6 typeof(int *)pa = &a;//pa的数据类型为int型的指针 7 8 printf("pa:\t%p\n", pa); 9 printf("&a:\t%p\n", &a); 10 printf(&

Robotframework 之常用断言关键字简介

任何自动化测试框架或实例中断言是必不可少的,Robotframework同样如此,那下面就介绍下其常用断言关键字. 1.Should Be Empty   判断是否为空,如果不为空,执行失败,示例: ${value} Set Variable hello Should Be Empty  ${value} 断言结果不为空 2.Should Start With 判断某个字符串是否以预期执行的字符串开始,如果以指定的字符串开头,则执行成功,否则执行失败,示例: ${value} Set Varia

关键字简介

Java一共有53个关键字. abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected

O-C相关-[email&#160;protected]关键字简介与使用

基本概念:在O-C中,创建完类之后还需要给一个类添加属性和方法,之前说过的set和get方法比较繁琐,因此引入了@property 这个编译器指令.@property 是一个编译器指令.所谓的编译器指令, 即告诉编译器如何处理内容, 要做什么.@property 告诉编译器声明读写器( getter 方法与 setter 方法) 1.在今天的 Xcode 中, @property 可以同时生成实例变量, 方法的声明以及方法的实现. 2, 重写 getter 方法与 setter 方法 虽然 @p