typedef与define比较

typedef与define比较

ID:40580017

大小:44.00 KB

页数:3页

时间:2019-08-04

typedef与define比较_第1页
typedef与define比较_第2页
typedef与define比较_第3页
资源描述:

《typedef与define比较》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、typedef与define比较1、typedef和definetypedef在编译时被解释,define在预处理时被替换。#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。typedefintsize;#defineMAX1002、typedef属于存储类声明说明符typedefintsize是一个完整的声明

2、,不可拆分,不能简单的看作这个语句的意思是替int起一个别名为size。3、typedef编译时做的事typedefintsize;sizelength;对sizelength;这条语句来说,在编译时不是把其中的“size”替换为“int”,真实过程应该是这样的:1、length声明为一个size类型。2、typedef语句后面部分中的语句(即intsize)相当于一个一元表达式,其中的size是一个未知数,现在要用length去代入这个一元表达式得到intlength,然后用这个替换得到的一元表达式取代si

3、zelength。3、1和2过程重复,直至一元函数中没有未知数。4、最终得到intlength。可能从上面这个简单的语句解释不足以说清我的理解思路,我们看一个复杂点的:typedefint(*PF)(constchar*,constchar*);PFRegister(PFpf);对PFRegister(PFpf);这条语句来说,在编译时它的过程应该是这样的:1、Register(PFpf)声明为PF类型。2、typedef语句后面部分中的语句(即int(*PF)(constchar*,constchar*))

4、相当于一个一元表达式,其中的PF是一个未知数,现在要用Register(PFpf)去代入这个一元表达式得到int(*Register(PFpf))(constchar*,constchar*)),然后用这个替换得到的一元表达式取代PFRegister(PFpf)。3、1和2过程重复,直至一元函数中没有未知数。4、最终得到int(*Register(int(*pf)(constchar*,constchar*)))(constchar*,constchar*)。其中过程3的详细过程:pf声明为PF类型。type

5、def语句后面部分中的语句(即int(*PF)(constchar*,constchar*))相当于一个一元表达式,其中的PF是一个未知数,现在要用pf去代入这个一元表达式得到int(*pf)(constchar*,constchar*)),然后用这个替换得到的一元表达式取代PFpf。得到int(*Register(int(*pf)(constchar*,constchar*)))(constchar*,constchar*)。#define的作用在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为

6、“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。在C或C++语言中,“宏”分为有参数和无参数两种。无参宏定义  无参宏定义的一般形式为:#define宏名字符串   无参宏的宏名后不带参数。  其定义的一般形式为:#define标识符字符串  其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“

7、标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。  例如: #defineM(a+b) 它的作用是指定标识符M来代替表达式(a+b)。在编写源程序时,所有的(a+b)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(a+b)表达式去置换所有的宏名M,然后再进行编译。  程序1:  #defineM(a+b)  intmain()  {  ints,y;  printf("inputanumber:");  scanf("%d",&y);  s=M*M;  printf("s=

8、%d",s);  }  上例程序中首先进行宏定义,定义M来替代表达式(a+b),在s=M*M中作了宏调用。在预处理时经宏展开后该语句变为:S=(a+b)*(a+b)但要注意的是,在宏定义中表达式(a+b)两边的括号不能少。否则会发生错误。如当作以下定义后:#defineM(a)+(b)在宏展开时将得到下述语句:S=(a)+(b)*(a)+(b)  对于宏定义还要说明以下几点:  1.宏定义是用宏

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。