C – 枚举的前向声明?

在C中转发枚举对我来说不起作用。 我搜索了互联网和stackoverflow,但所有关于枚举器前向声明的问题都引用了c ++。 你在C中声明枚举器怎么办? 将它们放在每个文件的顶部(或包含在内),以便文件中的所有函数都可以访问它们? 谢谢

将它们放在标题中,以便所有需要它们的文件都可以访问标题并使用它的声明。

使用选项编译时:

$ /usr/bin/gcc -g -std=c99 -Wall -Wextra -c enum.c $ 

GCC 4.2.1(在MacOS X 10.7.1上)接受以下代码:

 enum xyz; struct qqq { enum xyz *p; }; enum xyz { abc, def, ghi, jkl }; 

添加-pedantic并警告:

 $ /usr/bin/gcc -g -std=c99 -Wall -Wextra -pedantic -c enum.c enum.c:1: warning: ISO C forbids forward references to 'enum' types enum.c:5: warning: ISO C forbids forward references to 'enum' types $ 

因此,您不应该尝试在C中使用枚举类型的前向声明; GCC允许它在不被强迫迂腐时作为扩展。

您不能“转发声明”枚举,因为编译器不会知道枚举的大小。 C标准说“每个枚举类型应与char,有符号整数类型或无符号整数类型兼容。类型的选择是实现定义的,但应能够表示枚举的所有成员的值 ” 。