Введение

Стандарт языка программирования C, редакция 1999 года — диалект языка программирования.

C99 (ранее известный как C9X) — неофициальное название ISO/IEC 9899:1999, предыдущей версии стандарта языка программирования C. Он расширяет предыдущую версию (C90) новыми возможностями для языка и стандартной библиотеки, а также помогает реализациям более эффективно использовать доступное компьютерное оборудование, такое как арифметика с плавающей точкой IEEE 754 1985 года и современные технологии компиляции. Стандарт языка программирования C версии C11, опубликованный в 2011 году, является обновлением C99.

История

После того, как ANSI опубликовал официальный стандарт для языка программирования C в 1989 году, который в 1990 году стал международным стандартом, спецификация языка C на некоторое время оставалась относительно неизменной, в то время как C++ продолжал развиваться, в основном в процессе собственной стандартизации. Нормативное изменение 1 создало новый стандарт для C в 1995 году, но лишь для исправления некоторых деталей стандарта 1989 года и добавления более полной поддержки международных наборов символов. Стандарт был дополнительно пересмотрен в конце 1990-х годов, что привело к публикации ISO/IEC 9899:1999 в 1999 году, который был принят как стандарт ANSI в мае 2000 года. Язык, определённый этой версией стандарта, обычно называют "C99". Международный стандарт C поддерживается рабочей группой ISO/IEC JTC1/SC22/WG14.

Поддержка IEEE 754 с плавающей точкой

Основной особенностью C99 является поддержка численных вычислений, и в частности поддержка доступа к возможностям аппаратного обеспечения с плавающей точкой IEEE 754 1985 (также известного как IEC 60559), присутствующего в подавляющем большинстве современных процессоров (определенных в "Приложении F IEC 60559: Арифметика с плавающей точкой"). Платформы, не имеющие аппаратного обеспечения IEEE 754, также могут реализовать его программно. FLT EVAL METHOD == 1 был методом вычисления по умолчанию, изначально использовавшимся в K&R C, который приводил все числа с плавающей точкой к типу double в выражениях; а FLT EVAL METHOD == 0 также часто используется и определяет строгую "оценку по типу" операндов. (Для gcc, FLT EVAL METHOD == 2 является значением по умолчанию для 32-битных x86, а FLT EVAL METHOD == 0 – для 64-битных x86-64, однако FLT EVAL METHOD == 2 можно указать для x86-64 с помощью опции mfpmath=387.) До C99 компиляторы могли округлять промежуточные результаты непоследовательно, особенно при использовании аппаратного обеспечения с плавающей точкой x87, что приводило к компиляторно-зависимому поведению; такие несоответствия недопустимы в компиляторах, соответствующих стандарту C99 (приложение F).

Будущие работы

С момента ратификации стандарта C 1999 года рабочая группа по стандартам подготовила технические отчеты, описывающие улучшенную поддержку встраиваемых систем, дополнительные типы данных для символов (поддержка Unicode) и библиотечные функции с улучшенной проверкой границ. Работа над техническими отчетами, касающимися чисел с плавающей точкой десятичной формы, дополнительных специальных математических функций и дополнительных функций динамического выделения памяти, продолжается. Комитеты по стандартам C и C++ сотрудничают в разработке спецификаций для многопоточного программирования. Следующая редакция стандарта C, C11, была ратифицирована в 2011 году. Комитет по стандартам C принял принципы, ограничивающие внедрение новых функций, которые не были проверены существующими реализациями. Значительные усилия были направлены на разработку модели памяти для уточнения точек последовательности и поддержки многопоточного программирования.