typedef和define具体的详细区别

1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#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 不是语句 不要在行末加分号,否则 会连分号一块置换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串替换方法的优劣

需求:String str "中aacabbbaac中sabbcccdddddeee"; String[] findStr {"aa","b","c","d","e","f","g"} ; String[] repStr {"A","B","C",…

Fedora 19 Mate环境安装Gnome3

From: http://blog.csdn.net/skykingf/article/details/9230297 等了N久的Fedora19终于出来了,安装时选了Mate桌面,装完后发现真是回到了Gnome2的年代,同样是Mate,Fedora就不能向Mint15里的Mate学学?起码也让用户感觉…

6月份美国域名总量新增近5.4万个 环比减少51%

中国IDC评述网07月03日报道:据域名统计机构WebHosting.info公布的数据显示,截至2012年6月25日,美国域名总量达到了79,632,920个,域名增幅较小。下面,IDC评述网与大家一起关注6月份美国域名注册量最新情况。 &#xff0…

vue+element-ui大文件的分片上传和断点续传js-spark-md5和browser-md5-file

注意:以下共两份代码片段,第一份为原博主链接代码,第二份自己写的整体代码(比较乱) 1.参考 https://www.cnblogs.com/kelelipeng/p/10158599.html (js-spark-md5和browser-md5-file) 和 https:…

Fedora 20 安装试用体验全程讲解

From: http://www.jb51.net/os/Fedora/177583.html Fedora 20在两次跳票后正式发布,主要特性包括:远程桌面方案X2Go;网络管理器支持扩大绑定和桥接功能;改进3D打印机支持等,本文中,作者对Fedora 20 进行安装…

NUC972配置为支持NFS

为了使用NFS进行调试。需要安装NFS server,具体的流程在上一篇博文中有较为详细的介绍。在配置内核时需要做如下的操作: 对于Boot option中的处理,可以不用写在env.txt配置也是可以的。 baudrate115200 bootargsnoinitrd consolettyS0,115200 r…

华为的冬天(来自网路)---任正非

公司所有员工是否考虑过,如果有一天,公司销售额下滑、利润下滑甚至会破产,我们怎么办?我们公司的太平时间太长了,在和平时期升的官太多了,这也许就是我们的灾难。泰坦尼克号也是在一片欢呼声中出的海。而且…

js call

call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象。 call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传…

【Fedora20】 samba配置

From: http://blog.163.com/shi_shun/blog/static/23707849201452641312640/ 1、安装前的准备 关闭防火墙 //不关的后果是windows看不到本机 systemctl stop firewalld //暂时关闭防火墙 systemctl disable firewalld //开机禁止启动 关闭selinux //不关…

64位ubuntu安装交叉编译器出现的问题。nuc972工程中的问题

现象 :arm-linux-gcc-v 出现no such file or dir. 解决办法:apt-get install lsb-core 现象:gcc: error while loading shared libraries: libstdc.so.6: cannot open shared object file: No such file or directory 解决办法:ap…

Linux PCI网卡驱动分析

http://www.uplinux.com/shizi/wenxian/4429.html Linux网卡驱动分析 学习应该是一个先把问题简单化,在把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动也是一样。那长长的源码夹杂着那…

【操作系统】实验二 作业调度模拟程序

一、目的和要求 1. 实验目的 (1)加深对作业调度算法的理解; (2)进行程序设计的训练。 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序。 单道批处理系统的作业调度程序。作业一投入运行&#xff0…

Ubuntu 12.04 LTS安装VMware Tools:无法找到kernel header path的问题

From: http://www.cnblogs.com/lifegoesonitself/p/3357375.html Ubuntu 12.04 安装 VMware Tools,运行vmware-config-tools.pl 时,总是提示The path "" is not valid.What is the location of the directory of C header files that match y…

Nuc972使用NandFlash时,uboot所需要的改动

先贴错误现象。 做工程,我发现,就应该里面记录下来,哪怕再简单,一两个月后,果断忘,最不能相信自己的脑子。不好使~~~~

手把手教你用Python爬虫煎蛋妹纸海量图片

我们的目标是用爬虫来干一件略污事情 最近听说煎蛋上有好多可爱的妹子,而且爬虫从妹子图抓起练手最好,毕竟动力大嘛。而且现在网络上的妹子很黄很暴力,一下接受太多容易营养不量,但是本着有人身体就比较好的套路,特意分…

chrome浏览器的跨域设置,前端修改跨域问题

原文:https://www.cnblogs.com/laden666666/p/5544572.html 做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程。但是新版本…

Server 2012 Hyper-v新功能之二:自动化支持技术

Server 2012 Hyper-v新功能之一:客户端 Hyper-V Windows PowerShell 是在 Windows Server 中执行自动化任务的脚本解决方案,新的适用于 Windows PowerShell 的 Hyper-V cmdlet 为 IT 专业人员提供了一种简单的方法,能够在 Windows Server 201…

串口VMIN VTIME 详解

以前跟着做过VxWorks的开发&#xff0c;主要通信方式是串口&#xff0c;因为底层BSP包已经做好了&#xff0c;串口通信非常简单。后来接触Linux&#xff0c;在一块OK6410上跑Linux串口通信&#xff0c;才发现原来天真的以为甚是简单的串口变得如此的不简单。#include <termi…