Что на самом деле возвращает функция «warning: type default» - «int»? - PullRequest
0 голосов
/ 29 марта 2019

foo.c:3:8: warning: type defaults to ‘int’ in declaration of ‘bar’ [-Wimplicit-int]

При попытке скомпилировать эти два файла я столкнулся с предупреждением, которое, как я знал, было связано с тем, что я не указывал тип функции бара в начале.Но я хотел выяснить, что на самом деле представляет значение, возвращаемое возвращаемым типом int.Я попытался изменить содержимое функции бара, включая количество параметров и тел функций (например, добавив несколько коротких операторов), но я не нашел никаких правил для возвращаемого значения.

foo.c

#include<stdio.h>

extern bar();

int main()
{
        int a = 4;
        int ret = bar(a);
        printf("ret = %d\n",ret);
        return 0;
}

bar.c

#include<stdio.h>

void bar(int a)
{
        printf("a = %d\n",a);
}

скомпилировано gcc -o fb foo.c bar.c

и результат

a = 4
ret = 6

1 Ответ

0 голосов
/ 29 марта 2019

Какой тип возвращает функция и какое значение возвращает функция, это разные вещи.

В extern bar(); вы не объявили функцию, возвращающую void, что означало бы, что ничего не возвращается.Это означает, что он возвращает что-то, и из-за истории языка C тип того, что он возвращает, по умолчанию равен int.

При таком объявлении функция должна вернутьint значение, если используется его возвращаемое значение.

В этом коде:

void bar(int a)
{
        printf("a = %d\n",a);
}

вы не возвращаете значение.Нет return заявления.Но возвращаемое значение используется в вашей подпрограмме main.Результирующее поведение не определяется стандартом C.В стандарте C нет правил о том, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...