当前位置: 首页 > news >正文

#define与typedef区别

1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:

#define PI 3.1415926

程序中的:area=PI*r*r 会替换为3.1415926*r*r

如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

 

2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名.
3)typedef int * int_ptr;与#define int_ptr int * ;
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说; 
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换 
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
 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 不是语句不要在行末加分号,否则会连分号一块置换。

相关文章:

  • Linux下命令设置别名--alias(同实用于mac)
  • Eclipse/MyEclipse导入导出注释模板
  • 正则介绍以及grep
  • AI的故事:半人马的诞生之路
  • 共享单车引发秩序问题增多,政府正在研究相关管理办法
  • web后台过程
  • 0314-布局遇到的问题(山东理工大)
  • java多线程处理导入数据拆分List集合 同步处理插入数据
  • 1011. A+B和C (15)
  • Pandora.js 视频介绍
  • display和position的值与用途
  • 吊销***用户
  • nginx 配置多 域名 + 多 https
  • 多城市将展开5G试点 启动车联网、物联网应用测试
  • 「镁客·请讲」影创孙立:AR市场规模正在急剧扩大,铺设线下体验店将成为2018年制胜关键...
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • jquery cookie
  • js作用域和this的理解
  • Linux中的硬链接与软链接
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法系列——算法入门之递归分而治之思想的实现
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • (C语言)共用体union的用法举例
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (译) 函数式 JS #1:简介
  • (转)Windows2003安全设置/维护
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 通过 Ef Core 操作 Mysql
  • .Net CoreRabbitMQ消息存储可靠机制
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @Autowired 与@Resource的区别
  • @EnableAsync和@Async开始异步任务支持
  • @Query中countQuery的介绍
  • @Validated和@Valid校验参数区别
  • [android学习笔记]学习jni编程
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [CF]Codeforces Round #551 (Div. 2)
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽
  • [IE技巧] 如何关闭Windows Server版IE的安全限制
  • [loj6039]「雅礼集训 2017 Day5」珠宝 dp+决策单调性+分治
  • [LVGL]:MACOS下使用LVGL模拟器
  • [Paper]Application of deep convolutional neural network for automated detection of myocardial...
  • [raspberry pi3] 串口线使用
  • [SOA介绍]什么是SOA?
  • [springboot专栏]文件本地上传与提供访问服务
  • [SV]SystemVerilog中指定打印格式
  • [UDS] --- RoutineCommunicationControl 0x31