C语言枚举与#define 宏的区别有哪些?

一、问题

        枚举类型是 ANSIC 新标准中增加的,在C编译中,对枚举元素按常量处理,因此称枚举常量,它们不是变量,⽽ #define 是预处理中的宏定义,定义⼀个符号常量。那么,枚举与#define 宏存在哪些区别呢?

二、解答

1.枚举与#define 宏的概述

(1)所谓枚举,是指将变量的值⼀⼀列举出来,变量的值只限于列举出来的值的范围内。

        例如,声明⼀个枚举类型 weekday:

enum weekday (sun,mon,tue,wed,thu,fri,sat);

        C语⾔编译按定义时的顺序使它们的值为 0,1,2…。可以输出枚举元素的值,也可以给枚举元素⾃定义值,后⾯的元素按顺序依次加1。如定义 sun=7,mon=1,那么依次加 为 tue=2, wed=3,…,sat=6。

(2)#define 宏定义是⽤⼀个指定的标识符来代表⼀个字符串。

例如:

#define Pl 3.14

        此宏定义的作⽤是指定标识符 PI 来代替 “ 3.14 ” 这个字符串,在编译预处理时,将程序中在该命令以后出现的所有的 Pl 都⽤ “ 3.14 ” 代替。它可以使⽤户能以⼀个简单的名字代替⼀个⻓的字符串。在程序中需要更改这个参数时,只需在宏定义中更改这个字符串就可以,从⽽降低出错率。

2. 枚举与#define 宏的区别

(1)在编译器中可以调试枚举变量,但是不能调试宏常量。

(2)#define 宏常量是在预编译阶段进⾏简单替换。枚举常量则是在编译的时候确定其值。

(3) 枚举可以⼀次定义⼤量相关的常量,⽽#define 宏⼀次只能定义⼀个。

三、总结

        其实学习⼀门编程语⾔很容易,但是在学习的过程中要学会随时整理⼰学的知识,将意思相近易混的知识做对⽐。只有对⽐之后,才会让原本零散的知识在脑中分类,知识体系才会更清晰,不会导致在学了很多的知识后,觉得⾃⼰知识学杂了,学乱了,越学越糊涂了。

说明:

        ANSIC 标准规定可以在 C 源程序中加⼊⼀些 “ 预处理命令 ” (preprocessor directives ), 以改进程序设计环境,这些预处理命令不是C语⾔本⾝的组成部分,不能直接对它们进⾏ 编译,必须在对程序进⾏通常的编译之前,先对程序中这些特殊的命令进⾏“预处理”, 即根据预处理命令对程序做相应的处理。

        例如,#define 宏定义了⼀个符号常量 A,则在预 处理时将程序中所有的 A 都置换为指定的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code repairman

你的鼓励将是我创作的最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值