Содержание | <<< | >>>

Неявный int больше не поддерживается

Несколько лет назад язык 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, не обязан принимать такой код.

Содержание | <<< | >>>