说明

typeof关键字是C语言中的一个新扩展,是对C语言原先32个关键字的扩展,这一新扩展特性在Linux的源代码中可以经常看到,这一扩展是否有在C语言的新标准中,我没有去验证,但是据了解,大部分的GNU的C编译器都支持了这一扩展,我在DEV C++上也验证了这一点。下面我们来看看这一扩展关键字的用法。

typeof的用法

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; 

等价于:

int *p1, *p2;

5,

typeof(int) *p3,p4;

等价于:

int *p3, p4;

6,

typeof(int [10]) a1, a2;

等价于:

int a1[10], a2[10];

使用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构造的主要应用是用在宏定义中。可以使用typeof关键字来引用宏参数的类型。

转载于:https://www.cnblogs.com/veaxen/p/9185330.html

C语言的新扩展typeof相关推荐

  1. golang python扩展_Python 利用Go语言编写 CPython 扩展 goPy的简单示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! goPy 是一个新的开源项目,实现了用 Go 语言来编写 CPython 扩展. 示例代码: # ...

  2. java程序填空题输出汤姆猫_《Java语言程序设计(新)》地大模拟

    <Java语言程序设计(新)>地大模拟 2020-08-29 08:08:08 635 有学员问关于<Java语言程序设计(新)>地大模拟的题目的参考答案和解析,具体如下: & ...

  3. 用C语言写PHP扩展

     用C语言写PHP扩展 1:预定义 在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def 内容是你希望定义的函数名以及参数: int a(int x,int y) s ...

  4. 吴琦:视觉-语言导航新进展:Pre-training 与 Sim2Real | 青源 Talk 第 12 期

    活动议程 日期:2月17日(周四) 时间 主题 14:30-14:35 开场简介 刘偲 北航人工智能研究院教授.博导,青源会会员 14:35-15:20 视觉-语言导航新进展:Pre-training ...

  5. 访问外部扩展C语言编程,单片机C语言编程(系统扩展IC)8.ppt

    单片机C语言编程(系统扩展IC)8 第8章 单片机系统扩展 第8章 单片机系统扩展 目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 8.4 串行扩展总线接 ...

  6. C语言设计新思维分享

    没有任何套路,直接获取资源 C语言已经有几十年的历史了,经过长时间的发展和普及,C语言的应用场景也有了很大的变化,一些的老的观念已经不在适用,在这里给大家推荐一本讲C语言特别好的书,<C语言设计 ...

  7. Linux下php添加新扩展

    今天干了一件很严重的错事,用TP开发完新项目后,传到服务器上报错,网上查了一下,说未加载PDO,就加载吧.找到配置文件PHP.ini,搜到;extension=php_pdo_mysql.dll,去掉 ...

  8. 如何用C语言编写PHP扩展的详解

    来源:http://www.jb51.net/article/38381.htm 本篇文章是对用C语言编写PHP扩展进行了详细的分析介绍,需要的朋友参考下 1:预定义 在home目录,也可以其他任意目 ...

  9. 可运行的c语言程序的扩展名为什么?

    C语言源程序经过C语言编译程序编译之后,生成一个后缀为".OBJ"的二进制文件(称为目标文件),最后还要由称为"连接程序"(link)的软件,把此". ...

  10. 可运行的C语言程序的拓展名,可运行的c语言程序的扩展名为什么?

    可运行的c语言程序的扩展名为".exe".c语言程序经过"编译程序"编译之后,生成一个后缀为".obj"的二进制文件:然后由"连接 ...

最新文章

  1. xp http文件服务器,在XP sp3下用IIS搭建http服务器总结
  2. 18、计算机图形学——BRDF与渲染方程
  3. 15.5 匿名内部类
  4. 利用JS实现简单的瀑布流效果
  5. fir fpga 不同截止频率_学习FPGA将来的出路在哪里?
  6. Commons codec jar包详解
  7. 语义分割之PointRend论文与源码解读
  8. Win10 配置 Python 环境变量
  9. 【手写数字识别】基于matlab GUI贝叶斯+线性分类器手写数字识别【含Matlab源码 828期】
  10. 这款开源的中文字体,太惊艳了!
  11. excel如何设置单元格的下拉选项框并着色
  12. 专题方案 | 项目里程碑管理系统
  13. hdu1052 Tian Ji -- The Horse Racing
  14. 《mysql必知必会》学习笔记
  15. 微信小程序云开发上传图片和删除图片
  16. 在Mysql中无符号是什么意思博客_mysql中的unsigned是什么意思???
  17. Linux 的chmod权限数字777、755、644代表什么?
  18. 教你用Python如何玩转声音文件,将声音按照语音间隙切割为片段
  19. linux下载大文件失败,Linux下FTP/SFTP传输大文件总是失败的处理办法
  20. vue 在 html标签上 做三元运算

热门文章

  1. 注意,GitHub发布重大更新,关系到所有程序员!
  2. 我为什么坚持写博客?
  3. 阿里45K高级Java岗,必备技能清单
  4. Silverlight for Windows Phone 开发学习笔记(-)
  5. 计算两个经纬度之间的距离
  6. 前端之JQuery:JQuery属性操作
  7. NOIP模拟赛20161016R2
  8. .AsEnumerable() 和 .ToList() 的区别:
  9. linux yum 安装软件
  10. gawk Notes(2)