K & R2 охватывает версию языка 1989/1990 гг. Текущий стандарт ISO C, опубликованный в 1999 2011, исключает правило "implicit int" и требует видимого объявления для любой вызываемой вами функции. Компиляторы не обязательно применяют это по умолчанию, но вы должны иметь возможность запрашивать более строгие предупреждения - и вам определенно следует это делать. В хорошо написанном новом коде правило не имеет значения (но его необходимо понимать).
Пример: стандартная функция sqrt()
объявлена в <math.h>
:
double sqrt(double);
Если вы пишете вызов без , требуемый #include <math.h>
:
double x = 64.0;
double y = sqrt(x);
компилятор C90 предполагает , что sqrt
возвращает int
- и генерирует код для преобразования результата из int
в double
. Результатом будет мусор или, возможно, сбой.
(Вы могли бы вручную объявить sqrt
самостоятельно, но это неправильное решение.)
Так что не делай этого. Всегда включайте любой заголовок, необходимый для любой функции, которую вы вызываете. Вы можете избежать вызова необъявленной функции, если она возвращает int
(и если ваш компилятор не обеспечивает строгую семантику C99 или C11, и если удовлетворены несколько других условий), но для этого нет веских причин.
Понимание правила "implicit int" все еще полезно для понимания поведения старого или плохо написанного кода, но вы никогда не должны зависеть от него в новом коде.