Сравнение С99 с С89. Общее впечатление

Содержание

Отличия между С99 и С89 можно разбить на три общие категории:


  • новые возможности, добавленные к С89
  • возможности, удаленные из С89
  • возможности, которые были изменены или расширены

Многие из отличий между С89 и С99 достаточно незначительны и относятся лишь к нюансам языка. А в этой книге основное внимание уделяется достаточно заметным изменениям — заметным настолько, чтобы влиять на способ написания программ.

Новые возможности


Скорее всего, самыми заметными из новых средств, которых не было в С89, являются те, которые связаны с использованием новых ключевых слов:

inline
restrict
_Bool
_Complex
_Imaginary

К другим важным новинкам относятся:


  • массивы переменной длины
  • поддержка арифметических операций с комплексными числами
  • тип данных long long int
  • комментарий /
  • возможность распределять код и данные
  • добавления к препроцессору
  • объявления переменных внутри оператора for
  • составные литералы
  • массивы с переменными границами в качестве членов структур
  • назначенные инициализаторы
  • изменения в семействе функций printf() и scanf()
  • зарезервированный идентификатор __func__
  • новые библиотеки и заголовки

Большинство возможностей были созданы комитетом по стандартизации, причем многие из этих возможностей созданы с учетом расширений языка, имеющихся в разных реализациях языка С. Впрочем, в некоторых случаях возможности были позаимствованы у C++, как, например, ключевое слово inline и комментарии вида /. Важно понять, что при создании С99 не были добавлены классы в стиле C++, наследование и функции-члены. В том, что С должен остаться С — в этом комитет по стандартизации был единодушен.

Удаленные средства


Самым заметным «излишеством», удаленным при создании С99, было правило «неявного int«. В С89 во многих случаях, когда не было явного указания типа данных, подразумевался тип int. А в С99 такое не допускается. Также удалено неявное объявление функций. В С89, если функция перед использованием не объявлялась, то подразумевалось неявное объявление. А в С99 такое не поддерживается. Если программа должна быть совместима с С99, то из-за двух этих изменений, возможно, придется немного подправить код.

Измененные средства


При создании С99 было сделано несколько изменений имевшихся средств. По большей части, эти изменения расширяют возможности или вносят определенную ясность в их значение. И только в небольшом количестве случаев изменения ограничивают или сужают применение средства. Многие изменения небольшие, однако некоторые из них являются достаточно важными, в том числе:


  • уменьшение ограничений транслятора
  • новые целые типы
  • расширение правил продвижения целых типов
  • более строгие правила употребления оператора return

Что касается влияния этих изменений на уже написанные программы, то самое значительный эффект имеет изменение правил употребления оператора return, из-за чего код, возможно, придется немного подправить.

В оставшейся части этой главы мы изучим основные различия между С89 и С99.