宏定义,const变量,枚举的区别
来源:互联网 发布:js正则表达式函数 编辑:程序博客网 时间:2024/05/17 02:30
宏定义(#define):
宏定义实际上是一种替换技术,是一种自我欺骗的手法,其目的是提高程序的可读性和简洁性。宏定义是给编译器准备的,编译完成后其中的宏就已经被实际内容所取代。
因此,通过#define“定义”出的所谓常量对程序来说并不是真正的常量,只是在我们眼里看似常量而已。当程序执行后,我们并不能知道其中的某个常数到底是通过宏定义“定义”的还是直接给出的。通过宏定义“定义”的所谓“常量”没有任何类型检查。
常量定义(const):
从名称上看,const才是定义常量的最正典的途径,事实也的确如此。const定义出的常量才是真正的常量,也是真正的“变量”,它会在程序执行时被分配空间,而且也有类型,因此在编译时也就会被进行类型检查。在C中,const常量跟变量的唯一区别是该处空间的内容一经初始化即不能被修改。
使用const常量时,需要注意的一个地方是:我们一样可以修改一个const指针所指向的内容。
const的用法在C++中被赋予了更丰富的含意,其中最常见的就是const引用,形如:const CSomeClass &,常被用于函数参数类型的指定。另外C++中还有const成员等。
枚举(enum):
枚举是在后来才引入C中的,主要用来定义一个常量集合,并将相关的枚举变量的取值范围限定于其中,其目的也是为了丰富程序的语意,提高程序的可读易懂姓。
枚举常量值完全可以被当作一个整型值来看待,因此可以赋予一个整型变量,但是它不能被赋值,因为它不是一个变量。
通过枚举方式定义的常量通常是作为一个集合出现的,该集合中的每个常量的含义有相关性。就比如我们最常见的关于星期的枚举类型
enum Day {Sunday,Monday,tuesday,Wednesday,Thursday,Friday,Saturday};
另外:常量通常都写成大写形式,这是一个不成文的约定。
1.宏定义是在预处理阶段进行展开;cnost变量是在编译运行阶段使用
2.宏定义没有类型,不做任何类型检查,仅仅是进行展开;const修饰的变量具有具体的类型,编译阶段执行检查
3.宏定义在文件中有多少次就展开多少次,不会分配内存空间;const修饰的变量会在内存中分配空间
4.const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝
5.有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
1.枚举属于常量;但宏定义不是常量
2.枚举常量是实体的一种;但宏定义不是实体
3.枚举具有类型,但宏定义没有类型,枚举与普通变量有作用域和值,但宏定义没有,它是一种预处理替换
- 宏定义、const变量、枚举的区别
- 宏定义,const变量,枚举的区别
- #define宏定义和const及enum枚举的区别
- 宏定义 枚举类型 const之间的区别
- const变量详解及与define宏定义的区别
- const型变量和#define宏定义的区别
- const,let,var 定义变量的区别
- 宏定义、常型变量、枚举之间的区别
- 枚举变量的定义
- javascript中定义变量var,const,let简单的区别
- js中let、var、const定义变量的区别
- iOS开发宏定义与const修饰的变量的区别
- iOS- define宏定义和const常变量区别
- 定义java的枚举变量
- const和#define宏定义的区别
- 宏定义与枚举的区别
- 宏定义和枚举类型的区别
- 宏定义和枚举类型的区别
- Mybatis之使用注解开发CRUD
- 宽高变化动画代码,旋转动画代码(HTML5)
- IDEA新建文件名为红色字体的解决办法
- 大数相加
- 数据库几大范式
- 宏定义,const变量,枚举的区别
- hdu 3262
- myeclipse2017控制台打印中文乱码最有效解决方案
- CF276C Little Girl and Maximum Sum(贪心+差分)
- diy搭建异步邮件服务
- JS数字转换
- 如何用TensorFlow训练聊天机器人(附github)
- Servlet 笔记(一)
- OkHttp深入理解(1)综述