文档章节

typedef和define具体的详细区别

geek_loser
 geek_loser
发布于 2014/08/06 10:09
字数 486
阅读 40
收藏 2

好长时间不接触C/C++了,刚才一看,发现练就基本的#define和TypeDef都弄不清了……惭愧的想死!!

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的指针,typedefint* 引入了一个新的助记符

这也说明了为什么下面观点成立
//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 不是语句 不要在行末加分号,否则 会连分号一块置换。


本文转载自:

geek_loser
粉丝 3
博文 75
码字总数 18955
作品 0
朝阳
私信 提问
typedef和define具体的详细区别

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

晨曦之光
2012/03/09
257
0
iOS学习——#define、const、typedef的区别

在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define、const以及typedef。那么它们之间有什么区别呢?我们接下来一个一个具体了解下。 一...

mukekeheart
02/21
0
0
typedef与#define的区别

1、typedef typedef并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类型的别名。 它是语言编译过程的一部分,但...

野渡书生
2016/04/19
42
0
typedef和define的区别

1:typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令. 1.1:typedef功能是用户为已有数据类型取别...

DragonRiver2015
2014/05/22
113
0
【C++_typedef_疑难定义收集整理】

(注:文章谨代表个人理解,如有错误,还望尽快指正,大家都能获益,我定感激不尽^^) 至今已遇到两个typedef诡异的定义,因此决定下笔记之,以备后用。 【typedef之const指针】 【案例】 type...

技术小胖子
2017/11/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

启动参数

常用启动参数,通过 -Dxx.yy=zz注入应用参数 -Deureka.instance.metadata-map.starkGroup=test3 -Dserver.port=8989 本地调试过程中,可改变端口来启动多个相同服务。修改启动的VM参数即可...

ZH-JSON
7分钟前
3
0
ES配置修改

查看配置 GET /_cluster/settings 修改配置 PUT /_cluster/settings{ "persistent" : { "xpack" : { "monitoring" : { "collection" : { "enabled" : ......

messud4312
19分钟前
2
0
Spring事务传播属性有那么难吗?看这一篇就够了

Spring事务传播属性有那么难吗?看这一篇就够了 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过...

不学无数的程序员
19分钟前
2
0
VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
44分钟前
4
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
53分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部