C语言enum枚举的用法(附带实例)
在 C语言中,枚举(enumeration)是一种用户自定义的数据类型,允许你为一组有名字的整数常量定义符号名。枚举也是一种方便且易于阅读的方法,用于表示一组相关的整数值,例如表示状态、错误代码等。
我们可以用有意义的英文单词来替代数字,这些英文单词可以自由命名,只要我们能够理解它们对应的类型即可。例如,我们可以将 1 表示的整型替换为 eInteger,将 2 表示的浮点数替换为 eFloat,将 3 表示的字符串替换为 eString。
枚举的定义使用关键字 enum,后跟枚举类型的名称以及由花括号括起来的枚举值列表,最后以分号结束。例如:
为什么说枚举是一种特殊的整型呢?让我们用输出整型的方式来输出这几个枚举类型,具体代码如下:
我们如果希望从 1 开始编号,则可以在 eInteger 后添加 =1,例如:
更特殊的是,你可以为枚举中的每个成员指定一个值,例如:
同时,我们在上面的实例程序中使用了类型定义,将枚举类型定义为 msgType。这样,在后续代码中,我们可以直接使用 msgType 来代表消息类型,这增加了代码的可读性。
我们可以用有意义的英文单词来替代数字,这些英文单词可以自由命名,只要我们能够理解它们对应的类型即可。例如,我们可以将 1 表示的整型替换为 eInteger,将 2 表示的浮点数替换为 eFloat,将 3 表示的字符串替换为 eString。
枚举的定义使用关键字 enum,后跟枚举类型的名称以及由花括号括起来的枚举值列表,最后以分号结束。例如:
enum msgType{ eInteger, eFloat, eString };
为什么说枚举是一种特殊的整型呢?让我们用输出整型的方式来输出这几个枚举类型,具体代码如下:
#include <stdio.h> enum msgType { eInteger, eFloat, eString }; int main() { printf("eInteger %d\n", eInteger); printf("eFloat %d\n", eFloat); printf("eString %d\n", eString); return 0; }运行结果为:
eInteger 0
eFloat 1
eString 2
我们如果希望从 1 开始编号,则可以在 eInteger 后添加 =1,例如:
enum msgType{ eInteger = 1, // 让枚举从1开始 eFloat, eString };这样枚举就能够从 1 开始了,运行结果为:
eInteger 1
eFloat 2
eString 3
更特殊的是,你可以为枚举中的每个成员指定一个值,例如:
enum msgType{ eInteger = 1, eFloat = 3, eString = 5 };现在,我们可以使用枚举替代数字,对前面的信息类型判别的程序进行修改,完整代码如下:
#include <stdio.h> enum msgType { eInteger, eFloat, eString }; struct message { enum msgType type; union { int n; float f; char* str; }; }; void printMsg(struct message msg) { switch (msg.type) { case eInteger: printf("%d\n", msg.n); break; case eFloat: printf("%f\n", msg.f); break; case eString: printf("%s\n", msg.str); break; } } int main() { struct message msg[3]; // 第一条信息为整型,type 为 eInteger msg[0].type = eInteger; msg[0].n = 123; // 第二条信息为浮点型,type 为 eFloat msg[1].type = eFloat; msg[1].f = 3.14159; // 第三条信息为字符串,type 为 eString msg[2].type = eString; msg[2].str = "HelloWorld"; for (int i = 0; i < 3; i++) { printMsg(msg[i]); } return 0; }运行结果为:
123
3.141590
HelloWorld
同时,我们在上面的实例程序中使用了类型定义,将枚举类型定义为 msgType。这样,在后续代码中,我们可以直接使用 msgType 来代表消息类型,这增加了代码的可读性。