C语言中的typeof关键字

2023-11-02

typeof关键字是C语言中的一种新扩展,返回变量的类型。从本质上讲,它更像是使用typedef定义一个类型名称。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;
下面是两个等效声明,用于声明int类型的变量a。
typeof(int) a; /*int类型*/
typeof('b') a; /* GCC中这个表达式的类型是int(自动提升为int),注意typeof(char)和typeof('b')得到的不是一样的,这个用sizeof可以看出来*/

在C语言中字符常量类型为int类型.在C++中字符常量类型为char类型.

typeof在协助内嵌表达式的声明时非常有用。这里演示一个如何定义一个安全(在任何情况下,各参数只会被计算一次)的求最大值的宏。
#define max(a,b)

({

typeof (a) _a = (a);

typeof (b) _b = (b);

_a > _b ? _a : _b;

})
让局部变量名以下划线开关的原因是避免与内嵌表达式被使用时传进来的参数名相冲突。我们更希望建立一种新的语法规则,按照这种语法规则,声明的变量的作用域只在该变量初始化之后。相信这会是一种更加可靠的避免冲突的方法。


3、使用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";


4、如果你要把typeof写在头文件中,而且这些头文件是要用在ISO C程序中,那么应该写成__typeof__而不是typeof


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中的typeof关键字 的相关文章

  • 解决控制台Could not resolve view with name ...

    看效果 关于 Could not resolve view with name xxx in servlet with name spring mvc 的解决方法 1 原因之一 没有写 ResponseBody RequestMapping
  • NETCore入门系列(目录)

    文章目录 NETCore入门系列 目录 相关资源 NETCore入门系列 目录 1 NETCore入门系列 NETCore读取配置文件 cshtml中文乱码 2 NETCore入门系列 读取appsetting json配置文件内容 3 N
  • 【学习笔记】李宏毅2020ML&DL课程 1_8 - 8_8 Attack ML model

    Attack ML model 2 8 攻击网络 即找一张图片 使得loss cross entropy loss 越大越好 此时网络的参数训练完了 要被冻住 不能改变 而是只改变输入 使我们找到这样一张图片 能够让结果 越错越好 离正确答
  • element admin从入门到精通

    1 官方文档 https panjiachen gitee io vue element admin site zh guide 2 下载安装 集成版本 选择i8n分支 进入中文版 git clone https github com cn
  • 【javaSE】 枚举与枚举的使用

    文章目录 枚举的背景及定义 枚举特性总结 枚举的使用 switch语句 常用方法 示例一 示例二 枚举优点缺点 枚举和反射 枚举是否可以通过反射 拿到实例对象呢 枚举总结 总结 枚举的背景及定义 枚举是在JDK1 5以后引入的 主要用途是

随机推荐

  • Android 解决“Could not resolve all artifacts for configuration ‘:classpath‘”报错问题

    在开发的过程中 同步代码的时候 突然出现这个报错信息 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactRe
  • GAMES101课程学习笔记—Lec 10~12:Geometry 几何、隐式与显式、曲线与曲面、网格

    1 几何的表达方式 几何表达分为显式和隐式 1 1 隐式几何 举个例子 用空间中一个点来表示面 隐式的几何不会告诉我们这些点在哪里 而会告诉我们这些点满足的函数关系隐式的表达很难直接看出它的形状是什么 但是判断点的位置关系 在内在外在表面
  • PyQt主窗口、对话框

    PyQt的各类窗口 一 主窗口 QMainWindow 1 窗口样式 2 窗口模态 二 对话窗口 QDialog 1 消息窗口 QMessageBox 2 输入窗口 QInputDialog 3 字体窗口 QFontDialog 4 文件窗
  • python编程题题库及答案

    1 Python编程题怎么写 2 python编程问题 3 Python编程题求助 Python编程题怎么写 1 根据题意 头的总数为35 用变量head来记录头的总数 head 35 而腿的总数为94 用变量foot来记录腿的总数 foo
  • 前端开发者快速入门安卓开发(安卓嵌入式开发课程经验总结)

    目录 1 安卓开发结构 2 xml 3 java 使用xml的标签 Bitmap 4 开发注意 1 安卓开发结构 安卓开发和前端有异曲同工之处 只是js换成了Java 它的界面层是xml格式的 布局全部放在layout下 2 xml 以la
  • 数据库课程设计------书店管理系统1后续

    数据库课程设计 书店管理系统 部分的展示图如下 具体请查看网址 https kisaaki github io 2021 12 11 E6 95 B0 E6 8D AE E5 BA 93 E8 AF BE E7 A8 8B E8 AE BE
  • NTC——热敏电阻的采集方法

    前言 最近在调试STM32ADC采集NTC热敏电阻的温度值 总结下NTC热敏电阻温度值的采集方法 硬件平台 STM32F205 软件平台 keil V5 函数库 标准库 NTC热敏电阻温度采集方法 热敏电阻的相关知识点见百度文库的介绍 传送
  • freetype描边和半透明实现

    可以参考官网的另外一个c 实现的版本 https www freetype org freetype2 docs tutorial example2 cpp 我把它转化为C代码如下 include
  • maven依赖找不到的解决:手动下载、多镜像导入。

    maven中央仓库 远在国外 没下载 因为网络原因迟迟下载不下来 所以我们就需要配置一些国内的镜像仓库 来进行jar包的下载 但是阿里的仓库并没有收录中央仓库的全部jar包 因此导致我们有些jar包下载不下来 爆红 整合网络上资料 可以考虑
  • Python入门基础知识总结

    目录 一 简介 二 Python基础语法 2 1 字面量 2 2 注释 2 3 数据类型转换 2 4 标识符 2 5 运算符 2 6 字符串 2 6 1 字符串的三种定义方式 2 6 2 字符串拼接 2 6 3 字符串格式化 2 6 4 格
  • 深度学习中Batch、Epoch、Iteration的理解

    Batch 每一次训练就是一次Batch Batch Size的大小表示一个Batch样本容量的大小 对于Batch Size的选择有多种策略 Batch Size越大 由于可以利用并行化的优势 处理速度就会越快 可以充分利用内存资源 但是
  • 基于 Mask R-CNN 的鸟类识别 app

    一个基于 Mask R CNN 的鸟类识别 APP 可以识别五种鸟类 mAP 83 前言 这是博主的毕设的课题 时间紧迫加上自身能力所限 最后的作品还有很多不足 还望各位不吝指正 代码已经上传到了 github 并附上了详细的使用说明 先放
  • 数据信息查询

    package com myjdbc import java sql Connection import java sql ResultSet import java sql SQLException import java sql Pre
  • TiDB 架构的演进和开发哲学

    本文来自 CSDN 程序员 2017 年 2 月的封面报道 对于一个从零开始的数据库来说 选择什么语言 整体架构怎么做 要不要开源 如何去测试 太多的问题需要去考量 在本篇文章中 PingCAP 联合创始人兼 CTO 黄东旭对 TiDB 的
  • 最小二乘的矩阵形式

    为m n的矩阵 b为m 1的矩阵 则Ax b表达了一个线性方程组 它的normal equation的形式为ATAx ATb 当Ax b有解时 即矩阵 A b 的秩与A的秩相同 Ax b与ATAx ATb的解集是一样 而当Ax b无解时 A
  • AT32F415 MSC IAP SpiFlash As Disk

    SC0097 AT32F415 MSC IAP SpiFlash As Disk 示例目的 提供USB外挂SPI FLASH模拟U盘 在通过U盘存储固件进行升级 注 本示例代码是基于雅特力提供的V2 x x板级支持包 BSP 而开发 对于其
  • HDU - 2100 Lovekey

    XYZ 26进制数是一个每位都是大写字母的数字 A B C X Y Z 分别依次代表一个0 25 的数字 一个 n 位的26进制数转化成是10进制的规则如下 A0A1A2A3 An 1 的每一位代表的数字为a0a1a2a3 an 1 则该X
  • 达梦数据库sql实现查询当天的数据

    1 库数据 2 sql语句 select
  • 推荐一款优秀电商开源项目

    简介 本文给大家推荐博主自己开源的电商项目newbee mall pro 在newbee mall项目的基础上搭建而来 使用 mybatis plus 作为 orm 层框架 并添加了一系列高级功能以及代码优化 特性如下 商城首页 为你推荐
  • C语言中的typeof关键字

    typeof关键字是C语言中的一种新扩展 返回变量的类型 从本质上讲 它更像是使用typedef定义一个类型名称 typeof的参数可以是两种形式 表达式或类型 1 下面是使用表达式的的例子 typeof x 0 1 这里假设x是一个函数指