Oracle Solaris Studio 12.2:C++ 用户指南

4.4 对 enum 类型和变量进行前向声明

使用 -features=extensions 时,编译器允许对 enum 类型和变量进行前向声明。此外,编译器允许声明不完整 enum 类型的变量。编译器总是假定不完整 enum 类型的大小和范围与当前平台上的 int 类型相同。

以下是两行无效代码示例,如果使用 -features=extensions 选项,可对其进行编译。


enum E; // invalid: forward declaration of enum not allowed
E e;    // invalid: type E is incomplete

因为 enum 定义不能互相引用,并且 enum 定义不能交叉引用另一种类型,所以从来不必对枚举类型进行前向声明。要使代码有效,可以总是先提供 enum 的完整定义,然后再使用它。


注 –

在 64 位体系结构上,enum 要求的大小可能比 int 类型大。如果是这种情况,并且如果向前声明和定义在同一编译中是可视的,那么编译器将发出错误。如果实际大小不是假定的大小并且编译器没有发现这个差异,那么代码将编译并链接,但有可能不能正常运行。可能出现奇怪的程序行为,尤其是 8 字节值存储在 4 字节变量中时。