为什么typedef与enum类型一起使用?

Joo*_*ark 6 c enums typedef objective-c

为什么在下面的代码中需要typedef?

typedef enum _Coordinate {
    CoordinateX = 0,    ///< X axis
    CoordinateY = 1,    ///< Y axis
    CPCoordinateZ = 2   ///< Z axis
} Coordinate;
Run Code Online (Sandbox Code Playgroud)

为什么不只是下面的代码并删除typedef?

enum Coordinate {
    CoordinateX = 0,    ///< X axis
    CoordinateY = 1,    ///< Y axis
    CPCoordinateZ = 2   ///< Z axis
};
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 11

如果你没有typedef你的枚举,在你的其他代码中你必须引用它enum Coordinate而不仅仅是Coordinate,即使你知道 Coordinate是枚举.enum我想,这只是为了消除关键字的冗余.

为了使它更清楚,如果你typedef单独声明它,它会是什么样子:

enum _Coordinate {
    CoordinateX = 0,
    CoordinateY = 1,
    CPCoordinateZ = 2
};

// You map the enum type "enum _Coordinate" to a user-defined type "Coordinate"
typedef enum _Coordinate Coordinate;
Run Code Online (Sandbox Code Playgroud)

这也适用于C结构和枚举(无论如何,Obj-C枚举只是C枚举).