【问题标题】:Function expects to return value in C函数期望在 C 中返回值
【发布时间】:2012-03-15 22:35:09
【问题描述】:

我是 C 的新手,我正在编写其他人的代码,我正在尝试摆脱如下所示的警告:

warning: function expects to return value: myfunc

myfunc 是这样声明的,(我相信它默认为 int)

myfunc(int id, int age) {

   ...
   return;

}

所以我尝试把 void 放在 myfunc 后面,让它看起来像这样

void myfunc(int num, int age) {

我收到一个错误:

标识符重新声明:myfunc

    current : function() returning void

    previous: function() returning int : "students.c", line 233

但是当我转到students.c 的第233 行时,这只是我实际调用该函数的第一个地方。为什么会这样?

我知道我可以将 return 更改为 return 0;,然后将 myfunc 定义为 int。但是当这个函数被调用时,它并没有分配给任何东西,它只是像myfunc(current_id, age); 一样执行(例如不是int i = myfunc(...)。

在这种情况下,最好不要使用 void 吗?在void 函数中使用return; 可以吗?

谢谢!

【问题讨论】:

  • 您是否在某处声明了原型?
  • 你应该在students.c的第233行周围显示几行,如果它认为这是一个声明,听起来可能有问题。
  • @JoachimIsaksson,C89 允许在没有原型的情况下调用函数 - 编译器只会假设函数返回 int
  • 在定义该函数之前的某个地方,您有一个函数原型。这也需要改变。它很可能在一个名为 students.h 的头文件中
  • 这是我的问题,我没有声明原型

标签: c function void


【解决方案1】:

函数myfunc() 被声明为没有返回类型(某处):

myfunc(int id, int age);

或者根本没有声明,所以它默认为int返回类型。当您在定义中指定void 时:

void myfunc(int id, int age)
{
}

它与声明不匹配。更改或添加声明:

void myfunc(int id, int age);

您无需在返回类型为 void 的函数中显式写入 return;,但如果您愿意,也可以这样做。

【讨论】:

  • 谢谢,那里的声明去掉了警告,我想编译器一定以为我第一次调用这个函数实际上是一个声明,所以它引用了第233行抱怨它已经被定义为int
【解决方案2】:

您将void 添加到myfunc 的实现中是正确的。但是,看起来最初的程序员很草率,在students.c 中使用之前没有为myfunc 声明函数原型。在第 233 行之前的某处添加该原型,您应该一切顺利!

【讨论】:

  • 啊,谢谢!我错过了一个原型,这消除了警告,干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2022-11-17
相关资源
最近更新 更多