c – 允许枚举的标识符是什么意思?

前端之家收集整理的这篇文章主要介绍了c – 允许枚举的标识符是什么意思?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么当我尝试将不正确的值分配给类型枚举答案的变量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 [identifier] {enumerator-list}

我使用答案和性别作为我的枚举的标识符.允许这种语法是什么意思?

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

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中,枚举实际上等同于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&C++相关文章