typdef与define的区别

C++中typedef与const、指针 1 typedef的用法 在C++中,typedef关键字用来定义类型的别名。 typedef double wages; 此时,wages是double的别名,可以将wages作为数据类型来定义其他变量。 wages mywage; 其中,mywage的类型是double。 2 使用typedef定义指针的别名 使用typedef定义指针的别名的方法与“1 typedef的用... 阅读详情

转自某网友,之前不懂事没有留下原链接。

  1. #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
    #define PI 3.1415926
    程序中的:area=PIrr 会替换为3.1415926rr
    如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;
与
#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;

//refer to (xzgyb(老达摩))
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换

typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符

这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
typedef int * pint ;
#define PINT int *

那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。

pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象。

3)也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。

另转一篇

一、typedef的用法
在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:
typedef int INT;
typedef int ARRAY[10];
typedef (int*) pINT;
typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。
二、#define的用法
#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题,它的实例像:
#define INT int#define TRUE 1#define Add(a,b) ((a)+(b));#define Loop_10 for (int i=0; i<10; i++)
在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。
三、#typedef与#define的区别
从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量, 到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如 #define INT int这样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedef,因为在早期的许多C编译器中这条语句是非法的,只是现今的编译器 又做了扩充。为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别 名。
宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。请看上面第一大点代码的第三行:
typedef (int*) pINT;以及下面这行:#define pINT2 int*
效果相同?实则不同!实践中见差别:pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;表示定义了一个整型指针变量a和整型变量b。
注意:两者还有一个行尾;号的区别哦!

STM32F4的sct文件理解 原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~... 阅读详情

相关推荐

Centos7配置阿里云镜像源的教程

查看你的Centos版本,版本过低会导致安装失败,验证网络是否可以连接阿里云镜像,使用阿里云是需要网络的。# wget命令下载: wget [options] [url]# curl命令下载: curl [options] [url]我上面这个图片由于电脑问题是还没有加载完的。删除原来或者之前的yun源。

lyhshs的博客 2260

关于typedef的用法(未读)(此文极好)

 转贴 关于typedef的用法2007-04-04 17:20 关于typedef的用法 一.基本概念剖析 int* (*a[5])(int, char*);  

thimin的专栏 1675

结合 Conda 手动安装 RepeatMasker

RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。

m0_65437087的博客 2535

C语言const:禁止修改变量的值

有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定: const int MaxNum = 100; //班级的最大人数 这样 MaxNum 的值就不能被修改了,任何对 MaxNum 赋值的行为都将引发错误: MaxNum =

aeoluspu的专栏 1351

单端反激电源的RCD钳位电路吸收设计

反激电源尖峰电压和特点: 反激开关电源主要适用于中小功率<100W的电源设计中,特点是电路简单、成本低、可靠性高、宽稳压范围、转换效率PF高。但是由于本身变压器的漏感和其他参数的影响,变压器在高速开关关断瞬间会产生很大的尖峰电压,截止时产生的尖峰电压是由电路中的储能元件释放的电流引起的突变,过高的尖峰电压会影响开关管的正常工作,需要对尖峰电压采取措施抑制尖峰电压。 如上图所示,尖峰电压的钳位抑制方式有很多种。 TVS成本偏高,属于硬件导通,元件的可靠性较差,在低电压工作效果不理想。 RCD回路吸收

qq_31687191的博客 8488

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

XiaoqiangClub的博客 1万+

Typedef、 Const、#define三者的区别和联系

修饰的是这个指针指向的内容不允许修改,这个指针的地址可以改变。错误:在c语言中n并不是真正意义上的常量,它还是变量 ,对于数组来说必须要开辟一个准确的数组大小,C++中是可以编译过去。修饰的指针,表示这个指针的地址不可以修改,地址的内容可以修改。//这样也是错误的,数组必须是确定的。是一样的都是修饰变量a为常量。//a是int * a, b是 int* b。//a是int * a, b是 int b。补充:int *p,q表示p是指针变量,q是int变量。

controlourself的博客 535

Claude Code Skills 入门:内置技能与自定义技能开发

│ Skill 的特点 │1. 封装性:把复杂操作封装成简单命令2. 可复用:一次定义,随处使用3. 可定制:支持参数传入4. 可发现:通过 /skill-name 方式调用打个比方,如果说 Claude Code 的基础工具是「原材料」,那 Skills 就是「预制菜」——只需要简单加热(调用),就能得到成品(结果)。你可以创建自己的 Skill 来封装常用操作。Skill 支持参数,通过。

gaoxiang_120的专栏 671

typedef和define具体的详细区别

转自http://blog.youkuaiyun.com/21aspnet/article/details/6723915 1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r

wolenski的专栏 755

YOLOv13涨点改进 | 全网独家创新、高效涨点改进篇 | CVPR 2024 | YOLOv13引入SHSA单头自注意力模块,减少冗余的多头注意力,轻量化改进,助力目标检测和图像分类任务高效涨点

本文提出了一种改进YOLOv13模型的新方法——SHSA(单头自注意力)模块,用于提升目标检测任务的计算效率和推理速度。SHSA通过简化多头注意力机制为单头结构,显著减少了计算冗余和内存占用。实验表明,该模块在保持精度的同时,在GPU、CPU和移动设备上分别实现了3.3倍、8.1倍和2.4倍的加速效果。文章详细介绍了SHSA的结构原理、核心代码实现方法,以及如何集成到YOLOv13的配置文件中。这种改进特别适合资源受限设备,为实时目标检测提供了更优的速度-精度平衡方案。

Ai缝合怪、助力小伙伴高效发论文 506

【2026最新版】Open3D(C++)点云处理算法汇总(C++长期更新版)

C++版本Open3D进行点云处理的一些算法使用案例。博客长期更新,最近一次更新时间为:2026年4月11日。

点云侠的博客 1万+

Typdef和Define的区别

https://www.cnblogs.com/ktao/p/8578074.html

h_8410435的博客 292

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

efm32 入门.pdf

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

C++中define与typedef的区别

define 与typedef大体功能都是使用时给一个对象取一个别名,增强程序的可读性,但同时它们也有一些区别。

qq_61345460的博客 1926

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

typedef和define的区别

在C程序员面试的时候会经常的遇到typedef和define区别的问题,当然,可能大部分只是考察define的用法,考察的关键点之一是:define是宏定义,发生在与处理阶段,也就是编译之前,只进行简单而机械的字符串替换,而不进行任何检查。 而在有些面试中,这两个会结合起来一起考察,我们就应该掌握比较基础的,而遇到类似于int *(*func[5])(int (*)())甚至更复杂+BT的考试的

Lujp的空间 434

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

define和typedef区别

define和typedef是C/C++里面的两个关键词,但是在使用中我们很容易混淆。实际上这两者是有很大区别的。

爱唠叨的老鱼 869

typedef与define的用法及区别

关键字 typedef : 顾名思义类型定义,这里应该理解为类型重命名,从而增强程序的可读性。 例如: //将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名 typedef unsigned int uint_32; int main(){ unsigned int num1=0; //观察num1和num2,这两个变量的类型是一样的 uint_32 n...

qq_44723296的博客 744

C++中typedef和define的区别?

1.typedef是在编译器解析时进行处理,他会创建一个新的类型别名,具有与原类型相同的作用域,#define是预处理器指令,简单的文本替换。

dhongyi的博客 268

typedef与define的用法和区别

Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。 1. 首先,二者执行时间不同 关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。 Define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。   #define用法例子: #define f(x) x*x main

yaotan的博客 411

C++ define、typdef和const

C++ define、typdef和const (1)typdef与define typdef与define都是替一个对象取一个别名,以此来增强程序的可读性,但是它们在使用和作用上有几点不同:1.原理不同      #define是c语言中定义的语法,它是预处理指令,在预处理时进行简单而机械的字符串替换,不做正确性检查,不管含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误

YF_Li123的博客 874

define、typedef 和 const 有什么关系和区别

define、typedef 和 const 有什么关系和区别

qq_52875002的博客 287

typedef和define有什么区别

#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。 typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,...

qq_38993096的博客 186

typedef define inline 之间的联系和区别

闲来无事 看看 基础知识 define:定义预编译时处理的宏; 只进行简单的字符替换,无类型检测const:定义程序中的常量,编译时处理; 常量修饰符,把变量定义为常量 typedef:定义类型别名; 例: typedef int A; 则:A a; //定义a为int #define 宏定义(简单的替换)const 定义常量typedef 类型别名用于处理复杂类型inlin...

weixin_30753873的博客 105

宏定义define和typedef的区别

typedef关键字后面跟着的是原有的类型名,然后是新的类型名。总的来说,宏定义和typedef是用于创建别名的不同机制,它们在功能和使用方式上有所不同,开发者可以根据具体的需求和上下文选择合适的方式来创建别名。宏定义是在预处理阶段进行替换的,它可以包含任意的代码片段和表达式。宏定义是在预处理阶段进行文本替换的,而typedef是在编译阶段为类型创建别名。宏定义可以包含任意的代码片段和表达式,而typedef只能用于为类型创建别名。宏定义没有类型检查,而typedef创建的别名是类型安全的。

weixin_42492218的博客 497
下一篇: U-boot介绍
自醉其中
博客等级 码龄9年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值