Несколько лет назад язык C++ отменил правило неявного int, а с приходом С99 этому примеру последовал и язык С. В С89 правило неявного int гласит, что если явный спецификатор типа отсутствует, то подразумевается тип int. Больше всего это правило применялось к возвращаемому типу функций. В прошлом С-программисты часто пропускали int при объявлении функций, которые возвращали значение такого типа. Например, в ранние времена языка С функцию main() часто писали примерно так:
main () { /* ... */ }
При таком подходе возвращаемым типом по умолчанию просто считался int. В С99 (да и в C++) такого правила присвоения типа по умолчанию больше нет, и int приходится указывать явно, что и делается во всех программах, приведенных в этой книге.
А вот другой пример. В прошлом функция, такая как
int isEven(int val) { return !(val%2); }
часто писалась примерно так:
/* по умолчанию используется целый тип */ isEven(int val) { return !(val%2); }
В первом экземпляре кода возвращаемый тип int указывается явно. Во втором — это подразумевается по умолчанию.
Правило неявного int применялось не только к возвращаемым значениям функций (хотя здесь оно применялось чаще всего). Например, в С89 и более ранних версиях функцию isEven() можно было писать примерно еще и так:
isEven(const val) { return !(val%2); }
Здесь параметр val также имеет по умолчанию тип int — в этом случае const int. И опять, это присвоение типа по умолчанию int не поддерживается в Стандарте С99.
На заметку | В действительности компилятор, совместимый с С99, может принять код, содержащий неявные типы int, даже после того, как выдаст предупреждение об ошибке. Так что иногда можно компилировать и старый код. Однако компилятор, совместимый с С99, не обязан принимать такой код. |