#define、const、typedef的区别

#define、const、typedef的区别

ID:8795475

大小:16.23 KB

页数:7页

时间:2018-04-08

#define、const、typedef的区别_第1页
#define、const、typedef的区别_第2页
#define、const、typedef的区别_第3页
#define、const、typedef的区别_第4页
#define、const、typedef的区别_第5页
资源描述:

《#define、const、typedef的区别》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、#define、const、typedef的区别文章分类:JavaEye#define并不是定义变量,只是用来做文本替换例如:#definePI3.1415926floatangel;angel=30*PI/180;那么,当程序进行编译的时候,编译器会首先将“#definePI3.1415926”以后的,所有代码中的“Pi”全部换成“3.1415926”然后再进行编译。我查到一个讲const与#define的差别的帖子,里面谈到const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,c

2、onst的常量是一个Run-Time的概念,他在程序中确确实实的存在并可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。const常量存在于程序的数据段,#define常量存在于程序的代码段。至于两者的优缺点,要看具体的情况了。一般的常数应用,笔者个人认为#define是一个更好的选择:i.从run-time的角度来看,他在空间上和时间上都有很好优势。ii.从compile-time的角度来看,类似m=t*10的代码不会被编译器优化,

3、t*10的操作需要在run-time执行。而#define的常量会被合并(在上例中T*10将被0x82取代)。但是:如果你需要粗鲁的修改常数的值,那就得使用const了,因为后者在程序中没有实际的存在。(其实应该说修改数据段比代码段要简单^_^)。有关#define的用法1.简单的define定义#defineMAXTIME1000程序中遇到MAXTIME就会当作1000来处理.一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i

4、换为1000。这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。2.define的“函数定义”define可以像函数那样接受一些参数,如下#definemax(x,y)(x)>(y)?(x):(y);这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。但是这样做的话存在隐患,例子如下:#defineAdd(a,b)a+b

5、;在一般使用的时候是没有问题的,但是如果遇到如:c*Add(a,b)*d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了c*a+b*d另外举一个例子:#definepin(int*);pina,b;本意是a和b都是int型指针,但是实际上变成int*a,b;a是int型指针,而b是int型变量。这时应该使用typedef来代替define,这样a和b就都是int型指针了。所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。3.宏的单行定义#def

6、ineA(x)T_##x#defineB(x)#@x#defineC(x)#x我们假设:x=1,则有:A(1)------)T_1B(1)------)'1'C(1)------)"1"4.define的多行定义define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)#defineMACRO(arg1,arg2)do{/*declarations*/stmt1;stmt2;/*...*/}while(0)/*(notrailing;)*/关键是要在每一个换行的时候加上一个""5.在大规模的开发过程中,特别

7、是跨平台和系统的软件里,define最重要的功能是条件编译就是:#ifdefWINDOWS............#endif#ifdefLINUX............#endif可以在编译的时候通过#define设置编译环境6.如何定义宏、取消宏//定义宏#define[MacroName][MacroValue]//取消宏#undef[MacroName]普通宏#definePI(3.1415926)带参数的宏#definemax(a,b)((a)>(b)?(a),(b))关键是十分容易产生错误,包括机器和人理解上的差异等等。7.条件编

8、译#ifdefXXX…(#else)…#endif例如#ifdefDV22_AUX_INPUT#defineAUX_MODE3#else#define

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

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

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