Возможно, самая большая причина для беспокойства, связанного с появлением нового языкового стандарта, — это вопрос о совместимости со своим предшественником. Устареют ли уже написанные программы после выхода новой спецификации? Были ли изменены важные конструкции? Надо ли менять методологию или технологию программирования? Ответы на эти вопросы часто определяют, в какой степени будет принят новый стандарт и, в дальней перспективе, жизнеспособность самого языка. К счастью, создание С99 было управляемым, беспристрастным процессом — благодаря опытным «диспетчерам» этого процесса. Попросту говоря, если вам нравился С таким, каким он был, то понравится и версия С, определяемая Стандартом С99. То, что многие программисты думали о языке С как о самом элегантном в мире языке программирования, не устарело и сейчас!
В этой главе мы изучим изменения в С и дополнения к С, сделанные Стандартом 1999 года. Многие из этих изменений были вскользь упомянуты еще в части I. Здесь же они будут рассмотрены более подробно. Однако не забывайте, что во время написания этой книги компиляторы, которые поддерживали бы многие новые возможности С99, еще не были широко распространены. Возможно, вам придется немного подождать перед тем, как провести «испытательные полеты» с такими новыми восхитительными конструкциями, которыми являются массивы переменной длины, restricted-квалифицированные указатели и тип данных long long.
- Сравнение С99 с С89. Общее впечатление
- Указатели, определенные с квалификаторами типа restrict
- Ключевое слово inline
- Новые встроенные типы данных
- Расширение массивов
- Однострочные комментарии
- Распределение кода и объявлений
- Изменения препроцессора
- Объявление переменных внутри цикла for
- Составные литералы
- Массивы с переменными границами в качестве членов структур
- Назначенные инициализаторы
- Новые возможности семейства функций printf() и scanf()
- Новые библиотеки С99
- Зарезервированный идентификатор __func__
- Расширение граничных значений трансляции
- Неявный int больше не поддерживается
- Удалены неявные объявления функций
- Ограничения на return
- Расширенные целые типы
- Изменения в правилах продвижения целых типов