全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C/C++中的typedef和#define详解

C/C++中的typedef和#define

前言:

     在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef用来为一个已有的数据类型起一个别名,而#define是用来定义一个宏定义常量。下面谈谈两者在实际使用中应当注意的地方。

1.typedef关键字

   typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性。它可以为一串很长的类型名起一个别名,那么使用这个别名可以达到与原类型名相同的效果。

    如:

typedef int INT;
typedef char CHAR;

就为int和char分别起了一个别名,那么在程序中使用INT a;和int a;达到的效果是等同的。在使用typedef时应注意一下几点:

 1)typedef是为一个数据类型起一个新的别名,如typedef int INT;那么要告诉我的是INT表示整型,typedef int* INTPTR;则告诉我们INTPTR是一个指向整型变量的指针类型,这点与#define是决然不同的,#define只是作简单的字符串替换,不表达任何含义。如:

#define INTPTR1 int*
typedef int* INTPTR2;

INTPTR1 p1,p2;
INTPTR2 p3,p4;

INTPTR1 p1,p2;和INTPTR2 p3,p4;这两句的效果决然不同。INTPTR1 p1,p2;进行字符串替换后变成int* p1,p2;要表达的意义是声明一个指针变量p1和一个整型变量p2;而INTPTR2 p3,p4;由于INTPTR2是具有含义的,告诉我们是一个指向整型数据的指针,那么p3和p4都为指针变量,这句相当于int* p1,*p2;从这里可以看出,进行宏替换是不含任何意义的替换,仅仅为字符串替换;而用typedef为一种数据类型起的别名是带有一定含义的。

    再看下面这个例子:

#define INTPTR1 int*
typedef int* INTPTR2;

int a=1;
int b=2;
int c=3;
const INTPTR1 p1=&a;
const INTPTR2 P2=&b;
INTPTR2 const p3=&c;

上述代码中,const INTPTR1 p1表示p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向其他内容;而对于const INTPTR2 p2,由于INTPTR2表示是一个指针类型,因此用const去限定,表示封锁了这个指针类型,因此p2是一个指针常量,不可使p2再指向其他的内容,但可以通过p2修改其当前指向的内容,INTPTR2 const p3同样声明的是一个指针常量。

2)对于宏定义:

#define INT int
unsigned INT a;

  这种用法是可行的;

typedef int INT;
unsigned INT a;

是绝对错误的用法。

2.#define宏定义

   #define是一个宏定义命令,用来定义一个常量(包括无参常量和有参常量),它本身并不在编译过程中执行,而是在预处理阶段就已经完成了,因此不作任何正确性检查,只进行不关含义的字符串替换。在使用宏定义时,如果稍不注意就会发生错误,而且这个错误往往是你意想不到的。如:

#define ADD(a,b) a+b

int i=1;
int j=2;
int k=3;
int s=ADD(i,j)*k;

程序可能想求算的是(i+j)*k的结果,然而这段程序并没有达到这种效果,由于宏替换只是进行简单的字符串替换,那么ADD(i,j)*k相当于i+j*k,并不是想象中的(i+j)*k。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C/C++中的typedef和#define  # C++中的typedef和#define详细介绍  # 详解C++中typedef 和 #define 的区别  # 如何区分C++中的inline和#define宏  # C++中const与#define的利弊分析  # C/C++中宏定义(#define)  # 浅谈C++/C关于#define的那些奇奇怪怪的用法  # 是一个  # 的是  # 整型  # 可以通过  # 告诉我们  # 就会  # 是在  # 告诉我  # 是有  # 在实际  # 是用来  # 其他的  # 有一定  # 这段  # 希望能  # 仅为  # 几点  # 它可以  # 可以看出  # 不含 


相关文章: 济南企业网站制作公司,济南社保单位网上缴费步骤?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  IOS倒计时设置UIButton标题title的抖动问题  网站制作企业,网站的banner和导航栏是指什么?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  建站之星备案流程有哪些注意事项?  如何快速生成ASP一键建站模板并优化安全性?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何获取上海专业网站定制建站电话?  高防服务器租用如何选择配置与防御等级?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  想学网站制作怎么学,建立一个网站要花费多少?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  制作网站的公司有哪些,做一个公司网站要多少钱?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  建站之星ASP如何实现CMS高效搭建与安全管理?  小程序网站制作需要准备什么资料,如何制作小程序?  如何在建站主机中优化服务器配置?  建站主机空间推荐 高性价比配置与快速部署方案解析  如何在云虚拟主机上快速搭建个人网站?  黑客入侵网站服务器的常见手法有哪些?  浅析上传头像示例及其注意事项  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何通过FTP服务器快速搭建网站?  建站主机无法访问?如何排查域名与服务器问题  5种Android数据存储方式汇总  已有域名如何快速搭建专属网站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站之星后台管理如何实现高效配置?  建站之星导航配置指南:自助建站与SEO优化全解析  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  建站之星后台管理系统如何操作?  c++ stringstream用法详解_c++字符串与数字转换利器  网站制作公司排行榜,四大门户网站排名?  焦点电影公司作品,电影焦点结局是什么?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  招商网站制作流程,网站招商广告语?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何快速生成橙子建站落地页链接?  网站企业制作流程,用什么语言做企业网站比较好?  如何在建站之星绑定自定义域名? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。