typedef enum Colors{black, white};
void chess(int rows, int cols, Colors array[rows][cols]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i+j % 2 == 0) {
array[i][j] = black;
} else {
array[i][j] = white;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说 error: expected declaration specifiers or ‘...’ before ‘Colors’
我已经确定我已经正确地声明了枚举类型,所以我不确定这里的问题是什么.
枚举通常定义为enum Colors { black, white };并且必须通过名称引用enum Colors(enum前面是必需的).例如:
enum Colors { black, white };
void print_color(enum Colors color) {
if(color == black) {
printf("Black\n");
} else if(color == white) {
printf("White\n");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,"typedef"语法是 typedef enum { black, white } Colors;,现在我们只是通过名称引用它Colors(enum前面没有):
typedef enum { black, white } Colors;
void print_color(Colors color) {
if(color == black) {
printf("Black\n");
} else if(color == white) {
printf("White\n");
}
}
Run Code Online (Sandbox Code Playgroud)
这个奇怪的语法enum { black, white }实际上是一个无名的枚举,而typedef关键字给这个无名的类型一个名字.