Сравнение С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.

Содержание
    На главную страницунарерх
    Hosted by uCoz