枚举关键字作为返回类型的存在表示啥

Posted

技术标签:

【中文标题】枚举关键字作为返回类型的存在表示啥【英文标题】:what does the presence of an enum keyword as a return type indicate枚举关键字作为返回类型的存在表示什么 【发布时间】:2015-04-28 22:45:36 【问题描述】:

我目前正在处理一个庞大的代码库,我遇到了这个声明

static enum OPTION_FILE_NUM FileOption(const char *target);

现在我不确定enum OPTION_FILE 返回类型在这里表示什么?我在整个代码库中搜索了 OPTION_FILE_NUM 类型,但我找不到任何东西,但代码在 Visual Studio 中编译得很好。现在,当我在 Mingw GCC 中使用相同的代码时,出现以下错误。

 error: use of enum 'OPTION_FILE_NUM' without previous declaration

我的问题是上述陈述表明了什么?

【问题讨论】:

右键单击 OPTON_FILE_ENUM 并选择“转到定义” Visual Studio 在这种情况下没有帮助 【参考方案1】:

Visual Studio 作为非标准扩展允许前向声明枚举(没有大小信息)。

所以您看到这里使用了该功能。它向前声明了一个名称为 OPTION_FILE_NUM 的枚举,并说函数返回它。

由于扩展是非标准的,您的其他编译器会抱怨。

在使用之前注入正确的 decl,或者如果 C++11 注入 enum OPTION_FILE_NUM:int; 如果我没记错的话,这就是 msvc 隐式执行的操作。 (有趣的是,msvc 不支持调整大小的 enums forward decl,而只支持 unsized,这与标准要求的相反)。

【讨论】:

【参考方案2】:

就是这个意思:

enum OPTION_FILE_NUM elem1, elem2;

// function that returns OPTION_FILE_NUM
static enum OPTION_FILE_NUM FileOption(const char *target) 

int main()

您正在声明一个返回类型为enum OPTION_FILE_NUM 的函数。您应该在代码库中的某处或包含的某些标头中具有定义。尝试使用 IDE 并使用“跳转到定义”选项,您将能够找到罪魁祸首。

【讨论】:

只是想验证一下。看起来我可能不得不查看外部库并对其进行 grep。 Visual Studio 在这种情况下没有帮助 我可以肯定地告诉你,OPTION_FILE_NUM 不是标准的 C++ 对象或关键字。所以它必须在某个地方定义。 感谢您澄清这一点。 - 计时器清除后标记为答案

以上是关于枚举关键字作为返回类型的存在表示啥的主要内容,如果未能解决你的问题,请参考以下文章

C语言枚举类型是啥意思?

c语言中的布尔类型、枚举类型是个啥概念?

C语言中 main 是啥意思?

java中的枚举到底有啥作用?

c语言:输出枚举型变量的值,应该用啥格式说明

c++中的uint是为了保证返回值为正数使用的么,还是在啥情况下使用