#define与enum的区别

来源:互联网 发布:淘宝logo设计哪家好 编辑:程序博客网 时间:2024/05/21 17:50

1)enum当我们不主动对它进行赋值时,则枚举常量则会默认从0开始给enum中的每一个变量进行赋值。例如:

#include <iostream>

using namespace std;
#define MAX 10
enum MyEnum
{
MAX1 , 
MAX2 , 
MAX3 
};
int main()
{
cout << MAX1 << " " << MAX2 << " " << MAX3 << endl;
return 0;

}


但如果我们主动对枚举中的变量进行赋值的话,则枚举变量的大小就是我们主动赋值的大小。

#include <iostream>
using namespace std;
#define MAX 10
enum MyEnum
{
MAX1 = 1, 
MAX2 = 2, 
MAX3 = 3
};
int main()
{
cout << MAX1 << " " << MAX2 << " " << MAX3 << endl;
return 0;
}

但当我们对枚举变量没有进行全部赋值时,则没有进行赋值的变量的大小是在该变量的前一个变量大小的基础上加1进行赋值,例如:

#include <iostream>
using namespace std;
#define MAX 10
enum MyEnum
{
MAX1 = 1, 
MAX2 = 5, 
MAX3
};


int main()
{
cout << MAX1 << " " << MAX2 << " " << MAX3 << endl;
return 0;
}



2)枚举变量的大小只能为整型数据(例如:0、1、2...),由于enum在定义的时候不易与其它定义发生冲突(这是因为在编译的时候如果发生定义冲突就会编译报错继而终止)。此外,枚举是类型安全的,而宏定义则是类型不安全的。

#include <iostream>
using namespace std;
#define MAX1 1

#define MAX2 5

#define MAX3 6
enum MyEnum
{
MAX1 = 1, 
MAX2 = 5, 
MAX3
};
enum MyEnum1
{
MAX4,MAX5
};


int main()
{
cout << MAX1 << " " << MAX2 << " " << MAX3 << endl;
cout << sizeof(MyEnum) << endl;
cout << sizeof(MyEnum1) << endl;
return 0;
}


也许你会问为什么枚举常量的数目不同大小却一样呢?这是因为用sizeof(枚举)的时候将枚举量当做整型量来处理的,故大小都为4.


3)宏是在预处理阶段直接进行替换并且不进行类型检查而枚举则是在程序运行之后才起作用的,即宏与枚举的作用的时期不同;还有二者的存储位置也不同---宏存储在代码段,枚举常量不仅存储在数据段的静态存储区里还消耗CPU的资源。


原创粉丝点击