如何在C语言中定义枚举类型(enum)?

19 浏览
0 Comments

如何在C语言中定义枚举类型(enum)?

我不确定如何正确使用C枚举的语法。我有以下代码:\n

enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;

\n但这段代码无法编译,出现以下错误:\n

error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here

\n我做错了什么?

0
0 Comments

问题的出现原因是在声明 strategy 变量时重复声明了它,导致出现了上述错误。以下代码可以正常运行而不会有任何警告(使用 gcc -ansi -pedantic -Wall 编译):

#include 
enum { RANDOM, IMMEDIATE, SEARCH } strategy = IMMEDIATE;
int main(int argc, char** argv){
    printf("strategy: %d\n", strategy);
    return 0;
}

如果将上面的第二行改为以下代码:

...
enum { RANDOM, IMMEDIATE, SEARCH } strategy;
strategy = IMMEDIATE;
...

从警告信息中可以清楚地看出错误:

enums.c:5:1: warning: data definition has no type or storage class [enabled by default]
enums.c:5:1: warning: type defaults to ‘int’ in declaration of ‘strategy’ [-Wimplicit-int]
enums.c:5:1: error: conflicting types for ‘strategy’
enums.c:4:36: note: previous declaration of ‘strategy’ was here

编译器将 strategy = IMMEDIATE 视为一个名为 strategy 的变量的声明,默认类型为 int,但是已经有一个之前声明了同名变量。

然而,如果将赋值语句放在 main() 函数中,那么这段代码就是有效的:

#include 
enum { RANDOM, IMMEDIATE, SEARCH } strategy = IMMEDIATE;
int main(int argc, char** argv){
    strategy=SEARCH;
    printf("strategy: %d\n", strategy);
    return 0;
}

0
0 Comments

在C语言中,我们可以使用enum来定义枚举类型。使用enum可以为一组相关的常量赋予一个有意义的名称,并且可以更方便地使用这些常量。

在C语言中,声明一个enum变量的方法如下:

enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;

这样就定义了一个名为strategy的枚举类型,并且创建了一个名为my_strategy的变量并初始化为IMMEDIATE

然而,我们还可以使用typedef来缩短变量声明的代码,如下所示:

typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;

这样就定义了一个名为strategy的枚举类型,并且创建了一个名为my_strategy的变量并初始化为IMMEDIATE

为了区分类型和变量,使用命名约定是一个不错的做法:

typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;

这样我们定义了一个名为strategy_type的枚举类型,并且创建了一个名为my_strategy的变量并初始化为IMMEDIATE

但是,问题的提问者希望使用一个匿名的枚举类型来定义变量。

他问道:难道我不能只是声明enum MyEnum {} myVar;然后像这样使用变量myVarmyVar = SOMEENUMCONSTANT;吗?

然而,在C语言中,我们无法直接声明一个匿名的枚举类型并创建变量。

为了解决这个问题,我们需要为枚举类型指定一个名称,如strategy_type,然后使用这个名称来定义变量。这样我们就可以方便地使用枚举类型和变量了。

0
0 Comments

在C语言中,如何定义一个枚举类型(enum)?这个问题的出现是因为有人想知道在C语言中如何正确定义枚举类型。以下是解决该问题的方法:

在C语言中,可以使用以下方法定义枚举类型,无需使用typedef:

enum strategy { RANDOM, IMMEDIATE, SEARCH };
enum strategy my_strategy = IMMEDIATE;

这种方法相对冗长,但是将类型标识符放入标签命名空间中,不会与普通标识符冲突(类似于`struct stat`和`stat`函数的关系),并且可以立即看出它是一个类型。

另一种更简洁的方法是使用typedef:

typedef enum strategy { RANDOM, IMMEDIATE, SEARCH } strategy_t;
strategy_t my_strategy = IMMEDIATE;

这种方法更简短,但是将类型标识符放入普通命名空间中。

需要注意的是,上面的代码在C语言中是有效的,在C++中也可以使用类似的方法。

除了上述方法外,还有其他一些方法可以定义枚举类型,例如:

enum strategy { RANDOM, IMMEDIATE, SEARCH };

这种方法也是有效的,在需要使用枚举类型的实例时,可以这样声明变量:

enum strategy myEnum;

需要注意的是,不要使用`*_t`作为类型名,因为这些类型名在POSIX中是保留的。

以上就是如何在C语言中定义枚举类型的几种方法。不同的方法有各自的优缺点,开发者可以根据自己的需求选择合适的方法。

0