Программа C не выдает ошибку, если отсутствует прототип функции - PullRequest
2 голосов
/ 06 июля 2019

Я читал, что каждая функция в C должна иметь прототип, а также, что если функция принимает аргументы или возвращает значение, их типы данных должны быть упомянуты как в прототипе, так и в определении. Однако недавно я попробовал фрагмент кода, который включал вызов пользовательской функции, которая не удовлетворяла вышеуказанным требованиям. Тем не менее, программа не выдавала никаких ошибок, хотя результат был неверным. Кто-нибудь может дать объяснение?

Код, который я пробовал, был следующим:

#include<stdio.h>

int main(){

printf("%f",sum(3.2, 5.6));
return 0;
}

sum(a, b){
   return a+b;
}

Код компилируется и успешно выполняется с выходным значением 0,000000. Процесс завершается с кодом завершения 0. Я запускал код на различных онлайн-компиляторах.

1 Ответ

3 голосов
/ 06 июля 2019

Если вы не укажете тип возвращаемого значения или тип параметра, C неявно объявит его как int.

Это «особенность» более ранних версий C (C89 и C90), но в настоящее время она считается плохой практикой. Стандарт C99 (1999) больше не допускает этого.

Что касается того, почему она печатает 0,0000, то это потому, что функция возвращает int, для которого требуется спецификатор типа% d, но вы используете% f, который является спецификатором типа для double. Обратитесь к этому сообщению stackoverflow для дальнейшего объяснения печать int с использованием спецификатора формата% f

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