Intereting Posts
Конкатенация токена с использованием ## дает «недействительный токен предварительной обработки» Есть ли кроссплатформенная библиотека графического интерфейса для языка C? 99 Бутылка регенерации пива не подходит для работы Как преобразовать строку с нулевым символом в байтовый буфер в строку в Go? Как отключить оптимизацию компилятора в gcc? Помощь, необходимая для написания графического интерфейса в C Использование Antlr для получения идентификаторов и имен функций Segfault на IA-64, но не на IA-32 Создайте каталог в файловой системе в C С семафоров: sem_wait бросает необъяснимую ошибку Сервер TCP слушает mulitple клиентов сразу в C Как выйти из дочернего процесса и вернуть его статус из execvp ()? Использование scanf в цикле while 2 ^ n экспоненциальные вычисления действительно менее эффективны, чем бит-сдвиги? Все функции C должны быть объявлены в файле заголовка

В моем коде, почему отсутствие объявления функции не является проблемой для одной функции, но выдает предупреждение для другого?

В следующей программе я использую две функции prd () и display (). Я не объявлял ни один из них перед main (), прежде чем ссылаться на них в main (), и я определил как после main (), но пока prd ( ) работает плавно внутри main (), при вызове display () отображается предупреждение «Предыдущее неявное объявление« display »было здесь». Что отличается от display (), что есть предупреждение для него, но не для другого funciton prd () «Я не объявил ни одного из них, чтобы начать с. Если есть предупреждение из-за вызова одного, но другое работает отлично.

#include int main() { int x=8,y=11; printf("The product of %d & %d is %d",x,y,prd(x,y)); display(); return 0; } int prd(int x,int y) { return x*y; } void display() { printf("\n Good Morning"); } 

PS: И я был бы очень признателен, если бы вы могли ответить на этот второстепенный вопрос: «Является ли объявление функции вообще не необходимым в C, если есть определение для него?». У меня есть привычка объявлять все функции программы до основного (), а затем определяя их после функции main (). Я ошибаюсь?

Когда вы используете uneclared display() компилятор неявно объявляет его, как будто он возвращает int .

Когда компилятор, наконец, видит определение display() , он видит, что тип возврата void , но он уже предположил, что это int и поэтому определение и неявное объявление различаются, следовательно, ошибка / предупреждение.

Ошибка возникает, потому что C рассматривает все неиспользуемые функции с типом возвращаемого значения int . Функция display позже определяется с типом возврата void .

Изменение возвращаемого типа display() на int удаляет предупреждение.

По умолчанию компилятор принимает не объявленные функции как возвращающие int .

Это верно для вашей функции prd , но она не совпадает с display() как ее void . Это заставляет компилятор поднять предупреждение.

Для 2-го его всегда целесообразно объявлять функции.