#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的资源。
- #define与enum的区别
- enum的好处与 define 的区别
- 枚举enum与#define 宏的区别?
- enum,#define,const的区别
- enum和typedef 与#define宏定义的区别
- #define、const、enum的用法及区别
- define const enum 三者的区别
- 宏以及#define;enum;comst的区别
- 【C语言复习(三)】enum、typedef 和#define的分析与区别
- 枚举enum与typedef enum的区别
- 区别#define、enum和const
- define与enum与const
- 论define,const,enum三者的区别
- #define宏定义和const及enum枚举的区别
- #define与enum,你不知道的那些事
- #define与enum,你不知道的那些事
- #define与enum,你不知道的那些事
- typedef与#define的区别
- C#应用视频教程1.4 实现完整以太网通讯
- Android--kotlin语言学习资源
- C#应用视频教程1.3 Socket通信客户端完善
- C#应用视频教程2.1 OPENGL虚拟仿真介绍
- C#应用视频教程2.2 OPENGL虚拟仿真介绍
- #define与enum的区别
- C#应用视频教程2.3 OPENGL虚拟仿真介绍
- C#应用视频教程2.4 OPENGL虚拟仿真介绍
- C#应用视频教程3.1 USB工业相机测试
- C#应用视频教程3.2 Halcon软件测试
- C#应用视频教程3.3 Halcon+C#测试
- C#应用视频教程3.4 Halcon+C#测试
- Tensorflow Session graph Op 的理解
- C#.NET常见问题(FAQ)-找不到类型或命名空间名称“ManagementBaseObject”怎么办