gpt4 book ai didi

c - 为什么在文件范围内初始化枚举类型变量时出现错误?

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:52 27 4
gpt4 key购买 nike

当我尝试将枚举变量初始化为全局变量(即在任何范围之外)时,我无法理解这种情况。例如,如果我尝试编译以下代码:

#include <stdio.h>

enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3
} card;

card = club;
int main()
{
printf("Size of enum variable = %d bytes", sizeof(card));
return 0;
}

发生以下编译错误:

prog.c:9:1: warning: data definition has no type or storage class
card = club;
^
prog.c:9:1: warning: type defaults to 'int' in declaration of 'card' [Wimplicit-int]
prog.c:9:1: error: conflicting types for 'card'
prog.c:8:3: note: previous declaration of 'card' was here
} card;
^

但是当我将初始化放在 main() 范围内时,不会像下面的代码那样发生错误:

#include <stdio.h>

enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3
} card;

int main()
{
card = club;
printf("Size of enum variable = %d bytes", sizeof(card));
return 0;
}

输出是:

Size of enum variable = 4 bytes

最佳答案

你首先声明了一个名为 club 的全局变量,类型为 enum suit,但是你不能在函数之外的另一行初始化全局变量 - 你必须在同一行,像这样:

enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3
} card = club;

我觉得如果您将 enum club 定义从变量声明中移开,您的代码会更具可读性:

enum suit {
club = 0,
diamonds = 10,
hearts = 20,
spades = 3
};

enum suit card = club;

额外的 enum 关键字是因为 C(不像 C++)对每种类型都有不同的命名空间 - 所以你可以有 enum foostruct foo 在同一个项目中没有名称冲突,因为 enumstruct 类型名称存在于不同的命名空间中。

(我个人不喜欢使用 typedef - 但如果您愿意,可以随意使用)。

关于c - 为什么在文件范围内初始化枚举类型变量时出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101285/

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