Tag: enums

在C中有重复的枚举值是否合法?

enum protocol { ascii_prot = 3, /* arbitrary value. */ binary_prot, negotiating_prot = 4 /* Discovering the protocol */ }; binary_prot和negotiating_prot等于4 ?

C中的Typesafe枚举?

如果我有多个enum ,例如: enum Greetings{ hello, bye, how }; enum Testing { one, two, three }; 如何强制使用正确的enum ? 例如,我不希望有人在使用hello时使用hello以获得更好的调试和可读性。

Clang编译器的C enum的数据类型是什么?

我发布了其他问题: 我应该使用什么类型的C enum的二进制表示? ,通过答案,我必须知道我的编译器的枚举数据类型。 Clang编译器上C enum的数据类型是什么?

使用枚举的一些好例子

当我学习C时,我学会了枚举 ,并不时地提醒自己,并且大多数时候通过从某些来源重新阅读,我发现这是因为我从未在编程中使用它,我的编程兴趣集中在算法问题解决上,所以我不确定在哪里可以使用枚举。 有人可以提出一些很好的例子,使用枚举可以让事情变得简单吗? 我会赞赏算法示例,但欢迎算法或非算法示例。

枚举值的常量枚举大小,无论枚举值的数量

为什么enum的大小总是2或4个字节(分别在16位或32位架构上),而不管类型中的枚举数是多少? 编译器是否将enum视为union ?

枚举值的类型是什么?

我正在使用Apple的ScriptingBridge框架,并为iTunes生成了一个包含以下几个enum的头文件: typedef enum { iTunesESrcLibrary = ‘kLib’, iTunesESrcIPod = ‘kPod’, iTunesESrcAudioCD = ‘kACD’, iTunesESrcMP3CD = ‘kMCD’, iTunesESrcDevice = ‘kDev’, iTunesESrcRadioTuner = ‘kTun’, iTunesESrcSharedLibrary = ‘kShd’, iTunesESrcUnknown = ‘kUnk’ } iTunesESrc; 我的理解是enum值必须是整数,但这个定义似乎违反了这个规则。 此外,似乎将这些enum值视为整数(例如,在NSPredicate )并不是正确的事情。 我将上面的enum声明添加到具有空main函数的C文件中,并使用i686-apple-darwin9-gcc-4.0.1 。 因此,虽然这些类型的enum可能不符合C标准(正如Parappa在下面指出的那样),但它们至少被gcc编译成某种类型。 那么,那种类型是什么,以及如何在格式字符串中使用它?

错误代码枚举的C命名建议

我正在编写一个简单的解析器来读取配置文件.config.h接口只有三个主要function,简要如下, config_init(); config_dinit(); config_parse(); config_read_value(); 我的问题是那些函数会发出不同类型的错误,例如, config_init() emit , FILE_NOT_FOUND,FILE_EOF_ERROR,FILE_OPEN_ERROR, … config_dinit() emit , NOT_INIT_ERROR , config_parse() emit , PARSE_ERROR, OVERFLOW_ERROR, INVALID_CHARACTER_FOUND_ERROR,… config_read_value() emit, SECTION_NOT_FOUND,KEYWORD_NOT_FOUND,OVERFLOW_ERROR,NOT_INITIALIZED_ERROR,INVALID_STATE_ERROR,… etc. Then I create enums for each function, for by using these names , enum Config_ParseError{…} , enum Config_InitError{…} ,enum Config_ReadValueError{..} etc. 一些枚举值相互重叠,也会出现“编译错误”。 喜欢OVERFLOW_ERROR, 我正在打开你的建议, 我已经对google进行了快速研究,发现最流行的IRC客户端源代码定义了这样的枚举, enum { CMDERR_OPTION_UNKNOWN = […]

获得NS_ENUM项目数量的优雅方式

是否有一种优雅的方式来获取NS_ENUM中的项目总数? 而且最大值? 一些例子: typedef NS_ENUM(NSInteger, MyEnum) { MyEnumA = 0, MyEnumB = 1, MyEnumC = 2 }; // NumberOfItems(MyEnum) -> 3, MaximumValue(MyEnum) -> 2. typedef NS_ENUM(NSInteger, MyEnum) { MyEnumA, MyEnumB, MyEnumC }; // NumberOfItems(MyEnum) -> 3, MaximumValue(MyEnum) -> 2. typedef NS_ENUM(NSInteger, MyEnum) { MyEnumA = 4, MyEnumB, MyEnumC }; // NumberOfItems(MyEnum) -> 3, MaximumValue(MyEnum) -> […]

按名称获取枚举值

我有一个枚举,其中包含数百个条目。 我将枚举的值作为字符串。 有没有办法将字符串转换为枚举值? 否则,我将最终使用数百个if语句。 考虑 enum Colors { Red, Green, Blue, Yellow … } there are more than 100 entries 我将在字符串变量中获得”Red” , String color = “Red”; // “Red” would be generated dynamically. 通常我们通过以下方式访问枚举: Colors::Red , Colors::Blue等…有什么方法可以让我们以这样的方式访问它: Colors::color; // ie enumtype::stringVariable 在这里的许多post中,我们可以使用地图,但在构建地图时,我们最终会使用数百个if 。 有什么方法可以避免这种情况吗?

为什么#define同样有效时使用枚举?

所以enum的工作原理如下: enum { false, true } 这相当于 int false = 0 int true = 1 为什么我不用#define替换enum ? #define FALSE 0 #define TRUE 1 对我来说,它们似乎是可以互换的。 我知道#define能够处理参数,因此以与enum完全不同的方式运行。 在这种情况下我们有#define时enum的主要用途是什么? 如果我猜测,因为#define是预处理器function, enum将具有一些运行时优势。 我离我有多远? 提前致谢。