C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在哪种情况下应该使用匿名枚举?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在c和c枚举中都可以用tag定义
enum e_smth {
    smth_one,smth_two,smth_err
};

或没有标签

enum {
    smth_one,smth_err
};

如果用标记定义,在c和c中的switch语句中都是有意义的:

e_smth some_var;
....//do some stuff with some_var
switch (some_var)
{
case smth_one:
break;
case smth_two:
break;
}

会产生-Wswitch警告,如果这将使用gcc或g编译.

在c中的函数声明和变量初始化中是有意义的:

e_smth var;
var=99;

如果用g编译,将会产生错误错误.

两种带或不带标签的类型都可以用作一个没有参数的文件#define宏.

更新

意思是:不是在文件中写入#define MAX 1000,而是在文件范围内将MAX添加到全局使用枚举{MAX = 1000}

匿名枚举怎么办,我发现只有一个例:
定义像typedef枚举{a,b,c} some_t;使其像枚举一样工作

题:

如果我还没有描述所有合理的用例,应该使用匿名枚举?

@L_696_12@

在C(但不是C)中,可以使用枚举来定义int常量.

例如,给出这个声明:

const int MAX = 1024;
@H_4_4@mAX不是常量表达式,它是只读对象的名称.这意味着您不能在案例标签中使用它,因为在文件范围或静态或在需要常量表达式的任何其他上下文中声明的数组的大小.

但如果你写:

enum { MAX = 1024 };

那么MAx是int类型的常量表达式,可以在任何可以使用常量1024的上下文中使用.

当然你也可以写:

#define MAX 1024

但是使用预处理器有缺点:例如,标识符的范围不限于普通声明.

缺点是这种常数只能是int类型.

C有不同的规则;枚举常数是枚举类型,而不是int,但可以使用声明的常量对象作为常量表达式(只要初始化器是常量表达式).

为了解决原始问题,当你使用枚举声明来创建这样的常量时,没有必要使用标签或typedef,因为你永远不会使用类型本身.

背景:这个:

enum foo { zero,one,two };
enum foo obj = two;

创建一个类型枚举foo,常量为零,一和二.在C中,这些常量始终是int类型,这是不可否认的,而obj的初始化涉及从int到enum foo的隐式转换.

在C中,类型枚举foo也可以称为foo,并且常量类型为枚举foo(与某种整数类型兼容,不一定是int).

大佬总结

以上是大佬教程为你收集整理的c – 在哪种情况下应该使用匿名枚举?全部内容,希望文章能够帮你解决c – 在哪种情况下应该使用匿名枚举?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。