让我们看下面的例子:
#include <stdio.h>
enum fruit {APPLE, ORANGE, BANANA};
enum planet {EARTH, MARS, NEPTUNE};
void foo(enum fruit f)
{
printf("%ld", f);
}
int main()
{
enum planet p = MARS;
foo(p); /* compiler doesn't complain */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
enum如果代码可以编译,那么 s 有名字有什么意义呢?
这是我的 gcc 命令行:
gcc file.c -ansi -Wall -Wextra
Run Code Online (Sandbox Code Playgroud)
AFAIK,在 C99 中,“标签”(您所说的名称,例如fruit)enum 是可选的。
所以
enum { BLACK, RED, GREEN, BLUE, YELLOW, WHITE };
Run Code Online (Sandbox Code Playgroud)
是可以接受的(并且非常有用)
你甚至可以给出积分常数
enum { RFCHTTP =2068, RFCSMTP= 821 };
Run Code Online (Sandbox Code Playgroud)
这是比更现代的方式
#define RFCHTTP 2068
#define RFCSMTP 821
Run Code Online (Sandbox Code Playgroud)
(特别是,enum当您使用调试信息进行编译时,调试器知道这些值)
但在C中enum 大部分是整数值。C++ 中的情况有所不同。
关于使用参数的%ld格式控制转换,它可能是一些未定义的行为(所以你应该害怕)。可能会警告你。printfenumgcc -Wall -Wextra
顺便说一句,GCC有很多选择。阅读其有关调用 GCC 的章节。
我建议(2017 年)使用C99或C11进行编码,而不是旧的 1989 ANSI C。