如何将一种枚举类型键入另一种枚举类型?

问题描述 投票:0回答:1

这是我正在尝试做的一个最小示例:

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 color { RED, GREEN, BLUE }
将位于主头文件中,而
typedef enum legacy_color enum color
将位于向后兼容头文件中。

我能想到的唯一其他方法是

#define legacy_color color
,但这过于宽泛,并且会在枚举类型上下文之外匹配。

请注意,

typedef enum color legacy_color;
是不可接受的,因为类型已从
enum legacy_color
更改为简单的
legacy_color

c enums typedef
1个回答
0
投票

你有

typedef
向后的语法。定义的名称出现在最后。你也不要重复
enum
。使用

typedef enum color legacy_color;

这将使

legacy_color
成为您在上一行定义的枚举的同义词。

enum color { RED, GREEN, BLUE };
typedef enum color legacy_color;

legacy_color foo = GREEN;
enum color bar = BLUE;

int
main(void)
{
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.