作为返回类型的枚举关键字的存在表明什么

what does the presence of an enum keyword as a return type indicate

本文关键字:什么 存在 枚举 返回类型 关键字      更新时间:2023-10-16

>我目前正在使用一个巨大的代码库,我遇到了这个语句

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

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

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

因此,您会看到此处使用了该功能。 它转发声明名称OPTION_FILE_NUM的枚举,并说函数返回它。

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

要么

在使用前注入正确的 decl,要么如果 C++11 注入enum OPTION_FILE_NUM:int; 如果我没记错的话,这就是 msvc 隐式的作用。 (有趣的是,MSVC 不支持大小的枚举前向 DECL,而只支持未调整大小的枚举,这与标准要求相反)。

它的意思正是这样:

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 并使用"跳转到定义"选项,您将能够找到罪魁祸首。

相关文章: