Функция ожидает возврата значения в C - PullRequest
0 голосов
/ 16 марта 2012

Я новичок в C, я работаю над чужим кодом и пытаюсь избавиться от предупреждения, которое выглядит примерно так:

warning: function expects to return value: myfunc

myfunc объявлен так (Iверю, что по умолчанию это int)

myfunc(int id, int age) {

   ...
   return;

}

Поэтому я пытаюсь поместить void позади myfunc, чтобы это выглядело так1012 * идентификатор переименован: myfunc

    current : function() returning void

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

Но когда я перехожу на строку 233 student.c, это только первое место, где я на самом деле вызываю функцию.Почему это происходит?

Я знаю, что могу изменить return на return 0;, а затем определить myfunc как int.Но когда эта функция вызывается, она ни к чему не привязана, она просто выполняется как myfunc(current_id, age); (например, не int i = myfunc(...).

В такой ситуации лучше не использовать void?Можно ли использовать return; в функции void?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 16 марта 2012

Функция myfunc() объявлена ​​без типа возврата (где-то):

myfunc(int id, int age);

или декларации нет вообще, поэтому по умолчанию используется тип возврата int. Когда вы указываете void в определении:

void myfunc(int id, int age)
{
}

не соответствует объявлению. Измените или добавьте объявление:

void myfunc(int id, int age);

Вам не нужно явно писать return; в функции с типом возврата void, но вы можете, если хотите.

1 голос
/ 16 марта 2012

Вы правильно сделали, добавив void к этой реализации myfunc. Тем не менее, похоже, что оригинальный программист был небрежным и не объявил прототип функции для myfunc перед его использованием в students.c. Добавьте этот прототип где-нибудь перед строкой 233, и все будет хорошо!

...