首页 > 后端开发 > C++ > 我可以在 C 中转发声明枚举吗?如何转发?

我可以在 C 中转发声明枚举吗?如何转发?

Patricia Arquette
发布: 2024-12-11 00:27:14
原创
864 人浏览过

Can I Forward Declare Enums in C   and How?

在 C 中转发声明枚举:限制和解决方法

在 C 中,转发声明枚举以前是不可能的,因为枚举的大小取决于它的内容。然而,随着 C 11 的引入,只要明确指定枚举的大小,前向声明就成为可能。

问题陈述:

最初的问题出现了当尝试通过以下方式转发声明枚举时:

enum E;

void Foo(E e);

enum E {A, B, C};
登录后复制

此代码被拒绝

解释:

在 C 03 及更早版本中,不允许前向声明枚举,因为编译器需要知道枚举的大小才能存储它的值。枚举的大小取决于其枚举值的数量和类型。如果没有此信息,编译器无法为枚举分配内存。

C 11 及以上版本中的解决方案:

在 C 11 及更高版本中,前向声明枚举可以通过显式指定枚举的大小来实现。这可以使用枚举来完成:语法,其中 ;是枚举的基础类型,例如 unsigned int 或 unsigned Short。

例如:

enum Enum : unsigned int; // Forward declaration with an underlying type
void Foo(Enum e);

// Definition of the enum in a separate source file
enum Enum {
    VALUE1, VALUE2, VALUE3
};
登录后复制

此代码现在将成功编译。

私有枚举值的注意事项:

在提到的特定场景中,枚举值应该保密,前瞻性声明方法仍然可行。枚举可以在头文件中私有声明并在实现文件中内部定义,而不会将枚举值暴露给客户端。

但是,需要注意的是,前向声明不会阻止访问内的枚举值相同的翻译单元(即相同的源文件或编译在一起的文件集)。因此,仍然可以从有权访问头文件的程序其他部分访问枚举值。

以上是我可以在 C 中转发声明枚举吗?如何转发?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板