跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:C++ 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
使用 -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 字节变量中时。