我发布了其他问题:我应该使用什么类型的C enum的二进制表示?,通过答案,我必须知道我的编译器的枚举数据类型.
Clang编译器上C enum的数据类型是什么?
我发现自己总是将枚举的名称附加到其值,因为否则我经常与其他枚举冲突,例如:
typedef enum
{
A_ONE,
A_TWO,
} A;
typedef enum
{
B_ONE,
B_TWO,
} B;
Run Code Online (Sandbox Code Playgroud)
在C中有更好的方法吗?
我在"编程基础"课程中读到了enum值应该是唯一的,具有以下示例:
enum color = { red, orange, yellow };
enum fruit = { apple, orange, kiwi}; // error: orange is redefined
int kiwi = 42; // error: kiwi is redefined
Run Code Online (Sandbox Code Playgroud)
我也在这个问题上找到了相同的想法:两个枚举有一些共同的元素,为什么会产生错误?
枚举名称在全球范围内,它们必须是唯一的.
我在Ubuntu 14.10上的MonoDevelop中编写C#应用程序,我试图重现这种行为:
using System;
namespace FP
{
class MainClass
{
enum color { red, orange, yellow };
enum fruit { apple, orange, kiwi}; // error: orange is redefined
int kiwi = 42; // error: kiwi is redefined
public static void Main (string[] args) …Run Code Online (Sandbox Code Playgroud) 我的 C 项目中出现编译错误。我有一个包含此枚举的头文件:
typedef enum {
RAD_ALLOWED= 0,
RAD_STOPPED ,
RAD_OFF
} Values_E;
Run Code Online (Sandbox Code Playgroud)
并在另一个带有此枚举的头文件中:
typedef enum {
RAD_ALLOWED= 0,
RAD_STOPPED ,
RAD_OFF
} Values_X;
Run Code Online (Sandbox Code Playgroud)
当我将两个头文件包含在同一个 c 文件中时,我遇到类似于以下内容的错误:
214: error: previous definition of 'RAD_STOPPED ' was here
129: error: redeclaration of enumerator 'RAD_STOPPED '
Run Code Online (Sandbox Code Playgroud)
是的,两个枚举的内容是相同的,但名称不同,所以我不明白为什么会出现这个问题。请注意,包含这些枚举的两个头文件都是自动生成的,因此我无法更改它们的内容。