宏和const、typedef的区别

来源:互联网 发布:java 方法名拼写出来 编辑:程序博客网 时间:2024/06/05 05:36
1、宏和const区别
如果就单单定义常量说的话:1. const 定义的常数是变量 也带类型2. #define 定义的只是个常数 不带类型。
const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define定义的宏常量在内存中有若干个拷贝。#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型
总的来说:const:有数据类型,编译进行安全检查,可调试 define:宏,不考虑数据类型,没有安检,不能调试 
2、宏和typedef的区别
typedef一般用到类型别名的定义中,宏也可以,不过宏是预编译的时候进行替换,而typedef不是简单的替换,它相当于是定义一种类型在编译时用。
 使用的区别
#define Pointer1 int* 
typedef int* Pointer2
如果定义变量 Pointer1 a;Pointer2 b。毫无疑问a、b都是int型的指针变量。
Pointer1 a1,b1;
Pointer2 a2,b2;
这一个定义,用Pointer1定义的话,是相当于int* a1,b1;只是定义了一个int指针a1和一个int变量b1;所以这样定义会出现错误;
但是用Pointer2 a2,b2;定义变量表示a2和b2都是指针类型的变量。
不过使用typedef也会出现一些莫名其妙的错误,比如说:int b3=5;const Pointer2 a3=&b3;
我们的目的是要定义a3所指向的内容不发生改变,但结果不是我们想要的,在上面的定义汇总const Pointer2 a3=&b3 与Pointer2 a3=&b3等价。
相当于是定义了一个a3的常量指针,而不是a3指向的一个常量内容。这也是使用tyepdef需要注意的地方。
当然typedef的真正目的不仅仅是这样用,这只是typedef的一个简单用法。
0 0