首先我们必须清楚这几种类型的明确定义:
结构体struct是用户自定义的新数据类型,在结构体中可以包含若干个不同数据类型和不同意义的数据项(当然也可以相同),从而使这些数据项组合起来反映某一个信息。这里可以和数组对比一下(数组是相同类型元素的集合);
共用体union用法与struct的用法十分相似,不同数据类型的数据使用共同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体。
枚举类型enum,枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。我们先举一个例子:
#define A 1
#define B 2
#define C 3
#define D 4
#define E 5
#define F 6
#define G 7
我们一次宏定义了 7个大写字母,而且我们发现他们是从1开始一次递增,我再看枚举类型
enum character
{
A =1,B,C,D,E,F,G
};
枚举类型的第一个枚举成员默认值是0,随后的枚举成员默认(不赋值)比前一个成员增1;
因此我们显而易见的看出,两者的区别:
1)首先,枚举类型在表示多个替换时要比宏更具优势,枚举可以一次定义大量相关的常量,而宏只能定义一个;
2) 一般调试器可以调试枚举常量,但是不能调试宏常量。
3) #define宏常量在预处理阶段进行简单的替换,而枚举是在编译的时候确定其值;
如果想要了解跟多的相关enum与define的区别:参考http://blog.csdn.net/wang_zheng_kai/article/details/18605889
是否感觉enum与define的功能其实差不多?
引用两个问题(c语言深度解剖)
枚举可以做到的事,define都可以做到吗?
枚举可以自增1,这样不用每一个值都定义,而宏必须每个值都定义。而且枚举是一个集合,代表一类值,方便使用,而宏不能形成集合。所以我感觉,引用枚举类型最大的好处就是增加了程序的可读性。
同样,再举一个enum的例子:
enum
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday;
typedef enum workday
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday;
感觉怎么样?是不是和struct很相似