C 语言中 typeof keyword简单介绍
原文:http://hi.baidu.com/leowang715/blog/item/b0b96d6f972e7dd080cb4a06.html
typeofkeyword是C语言中的一个新扩展。仅仅要能够接受typedef名称,Sun Studio C 编译器就能够接受带有typeof的结构,包含下面语法类别:
- 声明
- 函数声明符中的參数类型链表和返回类型
- 类型定义
- 类型操作符s
- sizeof操作符
- 复合文字
- typeof实參
编译器接受带双下划线的keyword:__typeof和__typeof__。本文中的样例并没有遵循使用双下划线的惯例。从语句构成上看,typeofkeyword后带圆括号,当中包括类型或表达式的名称。这类似于sizeofkeyword接受的操作数(与sizeof不同的是,位字段同意作为typeof实參,并被解释为对应的整数类型)。从语义上看,typeof
keyword将用做类型名(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构造中的类型名不能包括存储类说明符,如extern或static。只是同意包括类型限定符,如const或volatile。比如,下列代码是无效的,由于它在typeof构造中声明了extern:typeof(extern int) a;下列代码使用外部链接来声明标识符b是有效的,表示一个int类型的对象。下一个声明也是有效的,它声明了一个使用const限定符的char类型指针,表示指针p不能被改动。
extern typeof(int) b;
typeof(char * const) p = "a";在宏声明中使用typeof
typeof构造的主要应用是用在宏定义中。能够使用typeofkeyword来引用宏參数的类型。
C 语言中 typeof keyword简单介绍的更多相关文章
- java基础-java语言中的keyword总结
keyword 1.定义:被java语言赋于了特殊含义的单词 2.用于定义基本数据类型的keyword: class interface float int long double byte ...
- c语言中typeof关键字
为什么因为一个关键字而专门写一篇随笔呢?因为这个关键字在Linux里面地位非同一般!这个关键字typeof在linux内核里面使用非常广泛! 下面这两个等效声明,用于声明int类弄的变量atypeof ...
- C 语言中 free() 函数简单分析
又是一个睡不着的夜晚,现在是凌晨03:16,不知道是不是感冒的原因,头脑并不是清醒,但是就是睡不着.摸着黑打开电脑,洗了杯子抓了点茶叶,然后打开饮水机电源.舍友们都睡着了,我戴着耳机听着轻音乐,也能听 ...
- C语言中time_t数据类型详细介绍
包含文件:<time.h> #ifndef __TIME_T #define __TIME_T /* 避免重复定义 time_t */ typedef long time_ ...
- Java 语言中 Enum 类型的使用介绍
Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...
- C语言中static用法介绍
C语言中static用法介绍 对于新手来说,很多东西的用法还不是很清楚,我们今天一起来看看C语言中static用法介绍 1.声明了static的变量称为静态变量,根据作用域的不同又分为 ...
- C 语言中 setjmp 和 longjmp
在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...
- awk命令简单介绍
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- JAVA 文件编译执行与虚拟机(JVM)简单介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...
随机推荐
- mysql远程连接
多人开发时,每人一份程序文件.但是有时需要公用一个份数据库.这时就需要数据库能远程连接. 现在以mysql为例演示一下. 这里远程连接可以 1.允许固定客户端ip登陆. select host,use ...
- OSI参考模型 VS TCP/IP参考模
OSI参考模型 VS TCP/IP参考模 TCP/IP各层对应的协议 TCP/IP的层 对应的TCP/IP协议 ...
- Android 下拉刷新控件Android-PullToRefresh
需要用到一个开源库 Android-PullToRefresh https://github.com/chrisbanes/Android-PullToRefresh ---------------- ...
- JSP 结构
网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面. 容器负责截获对JSP页面的请求.本教程使用内嵌JSP容器的Apache来支持JSP开发. JSP容器与Web服务器协同合作,为JSP的正 ...
- Quartz源码阅读
基于Quartz1.8.5的源码解读 首先看一个demo //简单的任务管理类 //QuartzManager.java package quartzPackage; import java.text ...
- Test for open live write
this is test document. this is test document. this is test document. this is test document. this is ...
- 共享式以太网与交换式以太网的性能比较(OPNET网络仿真实验)
一.实验目的 比较共享式以太网和交换式以太网在不同网络规模下的性能. 二.实验方法 使用opnet来创建和模拟网络拓扑,并运行分析其性能. 三.实验内容 3.1 实验设置(网络拓扑.参数设置. ...
- javascript日用代码集合(一)
获取url参数 function get_url_param(name){ var reg = new RegExp("(^|&)" + name + "=([^ ...
- http server v0.1_http_parse.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "mime.h&q ...
- [BZOJ 3680] 吊打XXX 【模拟退火】
题目链接:BZOJ - 3680 题目分析 这道题是SLYZ的神犇把JSOI的平衡点那道题改了一下题面变成了吊打GTY神犇..Orz 第一次写模拟退火,只能照着别人的代码写,我看的是PoPoQQQ神犇 ...