3 回答
TA贡献1772条经验 获得超8个赞
声明枚举变量是这样完成的:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
但是,您可以使用a typedef来缩短变量声明,如下所示:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
有一个命名约定来区分类型和变量是一个好主意:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
TA贡献1780条经验 获得超5个赞
这是值得指出的是,你并不需要一个typedef。你可以像下面这样
enum strategy { RANDOM, IMMEDIATE, SEARCH };
enum strategy my_strategy = IMMEDIATE;
您是否喜欢这是一个风格问题typedef。没有它,如果要引用枚举类型,则需要使用enum strategy。有了它,您可以说strategy。
两种方式各有利弊。一个比较罗word,但将类型标识符保留在标记名称空间中,在这里它们不会与普通标识符冲突(请考虑struct stat和stat函数:它们也不会冲突),并且您会立即看到它是一种类型。另一个较短,但是将类型标识符带入普通名称空间。
TA贡献1868条经验 获得超4个赞
您尝试声明strategy两次,这就是为什么您遇到上述错误的原因。以下作品没有任何投诉(与一起编译gcc -ansi -pendantic -Wall):
#include <stdio.h>
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了一个声明为strategydefault type 的变量的声明int,但是之前已经有一个使用此名称的变量声明。
但是,如果您将分配放在main()函数中,则它将是有效的代码:
#include <stdio.h>
enum { RANDOM, IMMEDIATE, SEARCH } strategy = IMMEDIATE;
int main(int argc, char** argv){
strategy=SEARCH;
printf("strategy: %d\n", strategy);
return 0;
}
- 3 回答
- 0 关注
- 1358 浏览
添加回答
举报