当前位置:网站首页>C专家编程 第3章 分析C语言的声明 3.5 typedef可以成为你的朋友
C专家编程 第3章 分析C语言的声明 3.5 typedef可以成为你的朋友
2022-08-03 16:09:00 【weixin_客子光阴】
3.5 typedef可以成为你的朋友
/*typedef是一种有趣的声明形式:它为一种类型引入新的名字,
*而不是为变量分配空间。在某些方面,typedef类似于宏文本替换,它并没有引入新类型
*而是为现有类型取个新名字。
*typedef关键字可以是一个常规声明的一部分,可以出现在靠近声明开始
*部分的任何地方。事实上,typedef的格式与变量声明完全一样,只是多了这个关键字,
*用来说明它的实质。
*普通的声明表示“这个名字是一个指定类型的变量”
*typedef关键字并不创建一个变量,而是宣称“这个名字是指定类型的同义词”。
*一般情况下,typedef用于简洁地表示指向其他东西的指针
*/
/*signal()是一种系统调用,用于通知运行时系统,当某种特定的“软件中断”
*发生时调用特定的程序,它的真正名称应该是“Call_that_routine_when_this_interrupt_comes
*_in"(当该中断发生时调用那个程序)。你调用signal(),并通过参数传递告诉它中断的类型
*以及用于处理中断的程序。
*/
/*ANSI C标准中,signal()的声明如下:*/
void (*signal(int sig, void (*func)(int)))(int);
void (*signal())(int);
//返回一个函数指针,后者所指向的函数接受一个int参数并返回void。其中一个参数是其本身
void (*func)(int);
typedef void (*ptr_to_func)(int);
/*它表示ptr_to_func是一个函数指针,该函数
*接受一个int参数,返回值为void
*/
ptr_to_func signal(int, ptr_to_func) {
/*它表示signal是一个函数,它接受两个参数
*其中一个是int, 另一个是ptr_to_func,返回
*值是ptr_to_func
*/
}
/*typedef的缺点
*它同样具有与其他声明一样的混乱语法,同样可以把几个声明器塞到一个声明中。对于结构,
*除了可以在书写时省掉struct关键字之外,typedef并不能提供显著的好处,而少些一个struct
*其实并没有多大帮助。在任何typedef声明中,甚至不必把typedef放在声明的开始位置
*/
/*小启发*/
/*不要在一个typedef中放入几个声明器,如下表示:*/
typedef int *ptr, (*func)(), arr[5];
/*ptr是“指向int的指针”类型
*func是“指向返回值是int的函数的指针”类型
*arr是“长度为5的int型数组”类型
*/
//千万不要把typedef嵌到声明的中间部分,如下所示:
unsigned const long typedef int volatile *kumquat;typedef int (*array_ptr)[100];
/*typedef 应该如前所述出现在声明的开始位置。在同一个代码块中,typedef
*引入的名字不能与其他标识符同名。
*/
边栏推荐
- 实时渲染流程操作复杂吗,如何实现?
- Introduction to spark learning - 1
- leetcode:187. 重复的DNA序列
- 想进阿里?先来搞懂一下分布式事务
- spark入门学习-1
- MySQL窗口函数 PARTITION BY()函数介绍
- Tolstoy: There are only two misfortunes in life
- 全新探险者以40万的产品击穿豪华SUV价格壁垒
- 从零开始搭建MySQL主从复制架构
- How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
猜你喜欢
土耳其国防部:联合协调中心将对首艘乌克兰粮船进行安全检查
leetcode-693.交替位二进制数
为什么我强烈推荐使用智能化async?
滑环安装注意事项
基于DMS的数仓智能运维服务,知多少?
AI+BI+Visualization, Deep Analysis of Sugar BI Architecture
一个文件管理系统的软硬件配置清单
To add digital wings to education, NetEase Yunxin released the overall solution of "Internet + Education"
蒋松廷 荣获第六季完美童模全球总决赛 全球总冠军
如何使用MATLAB绘制极坐标堆叠柱状图
随机推荐
leetcode SVM
破解数字化转型困局,企业分析协同场景案例解析
MySQL性能优化_小表驱动大表
uniapp隐藏导航栏和横屏显示设置
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
I am doing open source in Didi
MySQL查询语法
【Unity入门计划】基本概念(7)-Input Manager&Input类
请问下,flink cdc监控oracle,我看源码是通过sid方式的,请问怎么改成service
Why do I strongly recommend using smart async?
如何使用MATLAB绘制极坐标堆叠柱状图
[微信小程序开发者工具] × #initialize
Common distributed theories (CAP, BASE) and consensus protocols (Gosssip, Raft)
Windows 事件转发到 SQL 数据库
如何启动 NFT 集合
TCP 可靠吗?为什么?
C语言03、数组
[QT] Qt project demo: data is displayed on the ui interface, double-click the mouse to display specific information in a pop-up window
详谈RDMA技术原理和三种实现方式
Kubernetes 笔记 / 入门 / 生产环境 / 容器运行时