gpt4 book ai didi

c - 允许枚举标识符有什么意义?

转载 作者:太空狗 更新时间:2023-10-29 16:48:38 27 4
gpt4 key购买 nike

当我尝试将不正确的值分配给 enum answer 类型的变量 a 时,为什么编译器不报错?

#include <stdio.h>

int main()
{
enum answer {NO, YES};
enum gender {MALE, FEMALE};

enum answer a = 5; /* Assign an invalid value. */
printf("answer: %d\n", a);

a = MALE; /* Assign a value of wrong type */
printf("answer: %d\n", a);

return 0;
}

这是输出:

$ gcc -std=c99 -pedantic -Wall -Wextra enum.c 
$ ./a.out
answer: 5
answer: 0

如果 enum 不会导致类型检查,那么语法如下的意义何在:

enum [identifier] {enumerator-list}

我使用 answergender 作为我的枚举的标识符。允许这种语法有什么意义?

我的意思是这段代码可以写得很好

enum {NO, YES};
enum {MALE, FEMALE};

允许这种语法有什么意义?

enum answer {NO, YES};
enum gender {MALE, FEMALE};

最佳答案

Why doesn't the compiler complain when I try to assign incorrect values to variable a of type enum answer?

因为在 C 中,enum 实际上等同于 int。它像它一样被标准化,只是太多的程序依赖于它改变的行为。

在 C++ 中,它们是不同的类型,编译器会提示:

$ g++ -Wall -Wextra a.c
a.c: In function 'int main()':
a.c:8:24: error: invalid conversion from 'int' to 'main()::answer' [-fpermissive]
a.c:11:14: error: cannot convert 'main()::gender' to 'main()::answer' in assignment

What is the point of allowing this syntax?

我的快速猜测是向前兼容。

关于c - 允许枚举标识符有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com