难以定义枚举

Aks*_*hah 0 c enums typedef

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’

我已经确定我已经正确地声明了枚举类型,所以我不确定这里的问题是什么.

Frx*_*rem 5

枚举通常定义为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关键字给这个无名的类型一个名字.