“'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 是,因为你 typedefined 它:

更正:

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” 当返回一个结构时的主要内容,如果未能解决你的问题,请参考以下文章