“'return' with a value, in function return void” 当返回一个结构时
Posted
技术标签:
【中文标题】“\'return\' with a value, in function return void” 当返回一个结构时【英文标题】:"‘return’ with a value, in function returning void" when returning a struct“'return' with a value, in function return void” 当返回一个结构时 【发布时间】:2021-12-18 16:29:56 【问题描述】:我收到编译错误:
warning: ‘return’ with a value, in function returning void
这是我的代码:
#include <stdio.h>
typedef struct
int a;
char b;
values;
values keyword;
struct values get_keyword(void)
return keyword;
int main()
keyword.a = 10;
【问题讨论】:
您发布的错误与此代码不对应。这是真正的代码吗?除此之外,struct values
-> values
。
欢迎来到 Stack Overflow。请阅读How to Ask 并提出问题。另外,请尽量确保您理解您使用的术语。 “我正在返回一个 typedef 函数”根本没有意义。
@Lundin 是的(或多或少):godbolt.org/z/5cnMdG1hM
@Jabberwocky 为什么 OP 会发布第二个编译器错误而不是第一个?这没有任何意义。
叹息。嗯,这就是为什么一个人应该参加老师解释重点放在第一个错误的课程......好吧,我会重新投票。
【参考方案1】:
struct values
不是类型。 values
是,因为你 typedef
ined 它:
更正:
values get_keyword(void)
return keyword;
编译程序时更完整的输出将包括第一个错误:
<source>:10:15: error: return type is an incomplete type
10 | struct values get_keyword(void)
| ^~~~~~~~~~~
<source>: In function 'get_keyword':
所以,现在get_keyword
变成了void
,这会触发您在问题中显示的第二个错误:
<source>:11:12: warning: 'return' with a value, in function returning void
11 | return keyword;
| ^~~~~~~
<source>:10:15: note: declared here
10 | struct values get_keyword(void)
| ^~~~~~~~~~~
ASM generation compiler returned: 1
以前的错误通常会解释后来的错误,这里就是这种情况。
【讨论】:
这并不能解释编译器错误。 @Lundin,它确实解释了 OP 代码中的编译器错误。 (来自 gcc 的“错误:返回类型是不完整的类型”。)该错误根本不是 OP 声称的错误。 @Lundin 我现在尝试了代码,也许更新后的解释更好? @Lundin 我相信 OP 没有询问特定错误的解释,只询问如何编译此代码而没有错误 @0___________ 因为这就像我在问“为什么我的车在高速公路上行驶时撞到了地上的一个洞 - 我只有一个警告标志,限速 90 公里/小时”......但在此之前没有提及,他们开车经过“路尽头 - 施工区域”的标志。【参考方案2】:你的结构没有标签,只有类型定义的别名values
。
typedef struct
int a;
char b;
values;
values keyword;
values get_keyword(void)
return keyword;
如果你想在不使用别名的情况下使用它(但仍然使用 typedef)你需要添加标签:
typedef struct values
int a;
char b;
values;
values keyword;
struct values get_keyword(void)
return keyword;
【讨论】:
以上是关于“'return' with a value, in function return void” 当返回一个结构时的主要内容,如果未能解决你的问题,请参考以下文章