C语言基础(typedef)

Xilinx GTY Transceiver时钟方案与功耗优化实践 本文详细解析了Xilinx GTY Transceiver的时钟方案设计与功耗优化实践,涵盖从基础配置到高速24.33024Gbps和中速10.1376Gbps的实战案例。通过Transceivers Wizard的IP设计技巧和动态功耗优化方法,帮助工程师有效降低FPGA系统功耗,提升高速串行通信的稳定性与效率。 阅读详情

C typedef

C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:

typedef unsigned char BYTE;

在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:

BYTE  b1, b2;

按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但您也可以使用小写字母,如下:

typedef unsigned char byte;

您也可以使用 typedef 来为用户自定义的数据类型取一个新的名字。例如,您可以对结构体使用 typedef 来定义一个新的数据类型名字,然后使用这个新的数据类型来直接定义结构变量,如下:

#include <stdio.h>
#include <string.h>
 
typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} Book;
 
int main( )
{
   Book book;
 
   strcpy( book.title, "C 基础");
   strcpy( book.author, "LXW"); 
   strcpy( book.subject, "编程语言");
   book.book_id = 12345;
 
   printf( "书标题 : %s\n", book.title);
   printf( "书作者 : %s\n", book.author);
   printf( "书类目 : %s\n", book.subject);
   printf( "书 ID : %d\n", book.book_id);
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

书标题 : C 基础
书作者 : LXW
书类目 : 编程语言
书 ID : 12345

typedef vs #define

#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:

  • typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
  • typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

下面是 #define 的最简单的用法:

#include <stdio.h>
 
#define TRUE  1
#define FALSE 0
 
int main( )
{
   printf( "TRUE 的值: %d\n", TRUE);
   printf( "FALSE 的值: %d\n", FALSE);
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

TRUE 的值: 1
FALSE 的值: 0

typedef 与 #define 的区别

(1)#define可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。例如:

#define INTERGE int;
unsigned INTERGE n;  //没问题
typedef int INTERGE;
unsigned INTERGE n;  //错误,不能在 INTERGE 前面添加 unsigned

(2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:

#define PTR_INT int *
PTR_INT p1, p2;        //p1、p2 类型不相同,宏展开后变为int *p1, p2;
typedef int * PTR_INT
PTR_INT p1, p2;        //p1、p2 类型相同,它们都是指向 int 类型的指针。

typedef 还有一个作用,就是为复杂的声明定义一个新的简单的别名。用在回调函数中特别好用:

1. 原声明:int *(*a[5])(int, char*);

在这里,变量名为 a,直接用一个新别名 pFun 替换 a 就可以了:

typedef int *(*pFun)(int, char*);

于是,原声明的最简化版:

pFun a[5];

2. 原声明:void (*b[10]) (void (*)());

这里,变量名为 b,先替换右边部分括号里的,pFunParam 为别名一:

typedef void (*pFunParam)();

再替换左边的变量 b,pFunx 为别名二:

typedef void (*pFunx)(pFunParam);

于是,原声明的最简化版:

pFunx b[10];

其实,可以这样理解:

typedef int *(*pFun)(int, char*); 

由 typedef 定义的函数 pFun,为一个新的类型,所以这个新的类型可以像 int 一样定义变量,于是,pFun a[5]; 就定义了 int *(*a[5])(int, char*);

所以我们可以用来定义回调函数,特别好用。

另外,也要注意,typedef 在语法上是一个存储类的关键字(如 auto、extern、mutable、static、register 等一样),虽然它并不真正影响对象的存储特性,如:

typedef static int INT2; // 不可行

编译将失败,会提示“指定了一个以上的存储类”。

【Ranger】mac下Apache Ranger编译安装 a、编译过程中出现测试用例不通过和文件认证错误错误:带上参数-DskipTests=true -Drat.skip=true 重新编译;b、若编译过程中出现缺少jar包的情况,可能下载不了,需要手动自动添加;c、编译所需的其他工具如maven等安装配置略。采用这个会报错,因此我才用了下面一个命令。初始化设置Ranger Admin:执行。然后进入target目录。 阅读详情

相关推荐

接入穿山甲SDK时,Unity打Android包报错日志

SDK工程设置为Enable,项目工程设置为Disable。2、将unitypackage导入包名为:com.DefaultCompany.Myproject的另一个工程,打包报错。3、点击工程默认弹出Enable Android Auto-resolution 设置选项,点击Enable。1、新建一个空工程,设置包名为:com.ceshi.hewen,正常打包无报错,导出unitypackage。2、点击Reset to Defaults 重置参数,再点击ok关闭设置窗口。

不文不武的禾文 3585

typedef函数

typedef 下面是三个变量的声明,我想使用typdef分别给它们定义一个别名,请问该如何做? >1:int *(*a[5])(int, char*); >2:void (*b[10]) (void (*)()); >3. doube(* (*pa)[9])(); 答案与分析: 对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字ty

efffg的博客 481

整理笔记——二极管

二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线​​​二极管的正向特性:起初正向电压较小时,正向电流几乎没有,称之为死区,此时二极管处于截止状态。当电压差超过截止电压(0.5V或者0.7V),电流随着电压上升,开始增加缓慢,随后急剧增大,二极管的电阻变小进入导通状态,此时电压变化较小。二极管的反向特性:起初反向电流很小,不随电压二变化,此时成为反向饱和电流;当方向电压达到二极管的反向击穿电压。

#include 811

如何理解typedef void (*pfun)(void)

问题:      在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一“块”东西,而不是两“块”东西呢?那是谁“替代”了谁啊?我总结了一下,一方面是对typedef的概念不清晰,另一方面受了#define的影响,犯了定向思维的错误。 概念理解:typedef 只对已有的类型进行别名定义,不产生新的类型;#define 只是在预处理过程...

liu19891226的博客 9728

【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(下篇)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2237

多任务学习中的过拟合陷阱:动态停止训练机制详解与避坑指南

本文深入剖析了多任务学习中因任务过拟合不同步导致的性能下降问题,并详细介绍了动态停止-继续训练机制。该机制通过为每个任务设置独立的训练开关,基于验证集性能动态控制其梯度更新,有效缓解了任务间负迁移,是提升多任务模型整体泛化能力的关键策略。

happy2的博客 1092

函数指针定义与使用typedef void (*pfun)(int data);

typedef void (*pfun)(int data); /typedef的功能是定义新的类型。第一句就是定义了一种pfun的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回void类型。/ void myfun(int data) { printf(“get data:%d\n”,data); } 可以如此使用: pfun p= myfun; //函数指...

nb_zsy的博客 954

DeepSeek-OCR又更新:一起看下OCR1和OCR2

DeepSeek-AI 最近又又开源了,这次是DeepSeek-OCR2,结合之前发布的DeepSeek-OCR ,可以发现DeepSeek走出了一条不同于主流 OCR 方案的技术路线。第一代模型探索了**“视觉作为文本压缩介质”的可行性,打破了传统的序列长度限制;第二代模型则通过“Visual Causal Flow(视觉因果流)”**架构,将因果推理引入视觉编码器,解决了复杂排版下的阅读顺序难题。本文将从架构设计、逻辑结构、训练范式及工程实现四个维度,深度剖析这两代模型的异同与创新。

kakaZhui的博客 623

对typedef的真正理解

本人学C++也有三年了,还是对typedef不太熟,今天终于弄清楚了,所以发表此帖,希望对不太清楚的朋友能有所帮助。首先请看看下面这两句:typedef int a[10];typedef void (*p)(void);如果你能一眼就看出它们的意思,那请不要再往下看了。如果你不太理解,或概念还有些模糊,请继续往下看吧。下面的东西我就直接把人家的东西粘上去吧。自己敲太慢了。呵呵。原文(摘录):ty

疙瘩的专栏 8039

【WRFDA第三期】OBSPROC namelist 变量总结

OBSPROC namelist 变量总结

WW、forever的博客 1120

063.CI/CD for ML:给YOLO项目装上自动化流水线

本文分享了为YOLO目标检测项目搭建CI/CD流水线的实践经验。作者通过手动调试模型导出问题的经历,意识到重复验证工作比模型改进更耗时,提出需要自动化解决方案。文章详细介绍了四阶段流水线设计:1)代码质量检查;2)快速训练验证;3)推理性能基准测试;4)模型注册部署。同时总结了环境不一致、GPU资源争抢等常见问题及解决方案,建议从简单规则开始逐步完善,强调模型版本管理的重要性。实施后不仅提高了效率,还促使团队形成更规范的开发习惯。

2603_95664987的博客 235

C/C++中 typedef 的深入理解

大二的时候学数据结构总是用到typedef这个关键字,似乎都很熟练,但是,真的就理解了typedef真正的含义了吗 C++/C是真的博大精深!!!!!! 先把typedef的用法都列出来,看看我们是不是都理解: typedef int BOOL; //就是简单的将int类型去一个别名BOOL //然后我们可以用BOOL来定义一个整型变量:BOOL a = 13; ty...

HWQlet的博客 1007

具身智能机器人算法控制研究进展综述

具身智能(Embodied Intelligence)作为人工智能与机器人学的交叉前沿领域,强调智能体通过物理身体与环境的持续交互涌现智能行为。近年来,随着基础模型(Foundation Models)、扩散策略(Diffusion Policy)、视觉-语言-动作(Vision-Language-Action, VLA)模型以及大规模机器人数据集(如Open X-Embodiment)的快速发展,具身智能机器人的算法控制范式正经历深刻变革。

VectorShift的博客 229

C语言基础:typedef的使用

本文研究C语言中typedef关键字的作用。

u013288925的博客 9517

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C语言基础-typedef的用法

typedef的用法说明

赞的博客 1101

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C语言基础七typedef

typedef: 使用: typedef int Integer;//给int起一个别名,定义了一种新的数据类型,和int,double等级的 typedef Integer MyInteger; typedef unsigned int UInteger; //#define Integer int// int ma

kldxcr的专栏 883

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C语言基础 | typedef VS #define用法

目录:1、 typedef vs #define2、 typedef 用法2、 #define用法注:一个记录分享单片机、C语言,数据结构和算法,嵌入式Linux技术的==公众号==,让我们一起共同成长,记录生活记录你! 1、 typedef vs #define 编程中我们都会遇见 #define 和 typedef ,但是你知道两者的区别吗? 虽然他们都用于为各种数据类型定义别名,但是它们有以...

嵌入式RTOS圈 668

C语言基础:typedef关键字、 typedef vs #define

typedef关键字、 typedef vs #define

天行健 君子以自强不息,地势坤 君子以厚德载物。 257

C语言基础—— typedef

typedef  typedef 原有数据类型 新的数据类型;  1、别名的基础还可以再起别名  1、基本数据类型  2、结构体  3、枚举  4、指针  5、函数指针    //给基本数据类型起别名 void test(){     typedef int  Integer;     Integer num = 10;     printf("%d\n",num

Megatron的专栏 443

C语言基础_typedef

用typedef关键字用来给数据类型起一个别名。

zhuhwen123的博客 229

小白C语言基础详解: typedef 命令

小白C语言基础详解: typedef 命令

m0_46566693的博客 540

【C语言基础】typedef关键字的使用方法

一、typedef的作用 二、typedef的语法格式 三、常见的typedef使用示例

欢迎时常光顾我的干货超市,热衷于AIoT!! 566

C语言基础:C语言typedef(1) - typedef简单认识

前言 在我们学习开发中, 有很多类型都是系统自带的, 比如int, double, long, 指针类型, 如果, 你是系统自带类型恐惧症患者, 那么typedef就可以帮到你了, 请仔细看下面的内容. 开始 首先让我们来看一个例子: #include typedef int MyInt; int main() { int a = 10; MyInt

Cain For iOS的专栏 502

017 C语言基础:位域和typedef

有些数据在存储时并不需要占用一个完整的字符,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用0和1表示足以,也就是用一个二进位。正式基于这种考虑,C语言又提供了一种叫做位域的数据结构。那么什么是位域呢? 在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。例如: 对于 n 和 ch,第一次输出的数据是完整的,第二次输出的数据是残缺的。第一次输出时,n、ch 的值分别是 0xE、0x24(‘$’ 对应的 ASCII 码为 0x24),换算成二进制是 1110、

鸡蛋炒鸡蛋 812

C语言基础-define和typedef

参考:http://c.biancheng.net/view/298.html http://www.cnblogs.com/a1982467767/p/8889306.html typedef: C语言允许用户用typedef关键字来定义自己习惯的数据类型名称,以此来替代系统默认的(基本类型名称, 数组类型名称, 指针类型名称, 用户自定义的结构型名称, 共用型名称, 枚举型名称等.) 当用户定...

大琪爱吃鱼的博客 212

C语言基础07——共用体、枚举、typedef

摘要:本文介绍了C语言中三种重要的自定义数据类型:共用体、枚举和typedef。共用体(union)允许不同成员共享同一内存空间,大小等于最大成员的大小,适合节省内存或类型转换场景。枚举(enum)定义一组有意义的常量,提升代码可读性,常用于状态表示和选项选择。typedef用于创建类型别名,可简化复杂类型定义并增强代码可移植性,特别适用于结构体、指针和数组类型。文章详细比较了共用体与结构体、枚举与#define、typedef与#define的区别,并提供了各类型的定义语法、特点、使用方法和实际应用示例。

weixin_49647262的博客 779
上一篇: C语言基础(位域)
下一篇: C语言基础(文件管理)
Otis_L
博客等级 码龄12年 191粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值