【问题标题】:"‘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 会发布第二个编译器错误而不是第一个?这没有任何意义。
  • 叹息。嗯,这就是为什么一个人应该参加老师解释重点放在第一个错误的课程......好吧,我会重新投票。

标签: c struct typedef


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 2022-12-01
    • 1970-01-01
    • 2014-04-25
    • 2014-05-18
    • 2022-08-16
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多