这是我正在try 做的事情的一个最小例子:
enum color { RED, GREEN, BLUE };
typedef enum legacy_color enum color;
int
main(void)
{
return 0;
}
编译失败
test.c:13:27: error: two or more data types in declaration specifiers
13 | typedef enum legacy_color enum color;
| ^~~~
test.c:13:32: warning: empty declaration with storage class specifier does not redeclare tag
13 | typedef enum legacy_color enum color;
| ^~~~~
动机:我需要重命名一个enum,以符合我项目中当前的命名惯例.旧名称需要保留为别名,该别名将在兼容性头文件中声明.回到我的例子,enum color { RED, GREEN, BLUE }
将位于主头文件中,typedef enum legacy_color enum color
将位于向后兼容头文件中.
我能想到的唯一其他方法是#define legacy_color color
,但它过于宽泛,并且会匹配enum类型上下文之外的内容.
请注意,typedef enum color legacy_color;
是不可接受的,因为类型已从enum legacy_color
更改为legacy_color
.