Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Стандарт языка программирования C, редакция 1999 года — диалект языка программирования.
C programming language standard, 1999 revision
the programming language dialect
C99 (ранее известный как C9X) — неофициальное название ISO/IEC 9899:1999, предыдущей версии стандарта языка программирования C. Он расширяет предыдущую версию (C90) новыми возможностями для языка и стандартной библиотеки, а также помогает реализациям более эффективно использовать доступное компьютерное оборудование, такое как арифметика с плавающей точкой IEEE 754 1985 года и современные технологии компиляции. Стандарт языка программирования C версии C11, опубликованный в 2011 году, является обновлением C99.
C99 (previously known as C9X) is an informal name for ISO/IEC 9899:1999, a past version of the C programming language standard. It extends the previous version (C90) with new features for the language and the standard library, and helps implementations make better use of available computer hardware, such as IEEE 754 1985 floating point arithmetic, and compiler technology. The C11 version of the C programming language standard, published in 2011, updates 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.
After ANSI produced the official standard for the C programming language in 1989, which became an international standard in 1990, the C language specification remained relatively static for some time, while C++ continued to evolve, largely during its own standardization effort. Normative Amendment 1 created a new standard for C in 1995, but only to correct some details of the 1989 standard and to add more extensive support for international character sets. The standard underwent further revision in the late 1990s, leading to the publication of ISO/IEC 9899:1999 in 1999, which was adopted as an ANSI standard in May 2000. The language defined by that version of the standard is commonly referred to as "C99". The international C standard is maintained by the working group 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).
A major feature of C99 is its numerics support, and in particular its support for access to the features of IEEE 754 1985 (also known as IEC 60559) floating point hardware present in the vast majority of modern processors (defined in "Annex F IEC 60559 floating point arithmetic"). Platforms without IEEE 754 hardware can also implement it in software. FLT EVAL METHOD == 1 was the default evaluation method originally used in K&R C, which promoted all floats to double in expressions; and FLT EVAL METHOD == 0 is also commonly used and specifies a strict "evaluate to type" of the operands. (For gcc, FLT EVAL METHOD == 2 is the default on 32 bit x86, and FLT EVAL METHOD == 0 is the default on 64 bit x86 64, but FLT EVAL METHOD == 2 can be specified on x86 64 with option mfpmath=387.) Before C99, compilers could round intermediate results inconsistently, especially when using x87 floating point hardware, leading to compiler specific behaviour; such inconsistencies are not permitted in compilers conforming to C99 (annex F).
Будущие работы
С момента ратификации стандарта C 1999 года рабочая группа по стандартам подготовила технические отчеты, описывающие улучшенную поддержку встраиваемых систем, дополнительные типы данных для символов (поддержка Unicode) и библиотечные функции с улучшенной проверкой границ. Работа над техническими отчетами, касающимися чисел с плавающей точкой десятичной формы, дополнительных специальных математических функций и дополнительных функций динамического выделения памяти, продолжается. Комитеты по стандартам C и C++ сотрудничают в разработке спецификаций для многопоточного программирования. Следующая редакция стандарта C, C11, была ратифицирована в 2011 году. Комитет по стандартам C принял принципы, ограничивающие внедрение новых функций, которые не были проверены существующими реализациями. Значительные усилия были направлены на разработку модели памяти для уточнения точек последовательности и поддержки многопоточного программирования.
Since ratification of the 1999 C standard, the standards working group prepared technical reports specifying improved support for embedded processing, additional character data types (Unicode support), and library functions with improved bounds checking. Work continues on technical reports addressing decimal floating point, additional mathematical special functions, and additional dynamic memory allocation functions. The C and C++ standards committees have been collaborating on specifications for threaded programming. The next revision of the C standard, C11, was ratified in 2011. The C standards committee adopted guidelines that limited the adoption of new features that have not been tested by existing implementations. Much effort went into developing a memory model, in order to clarify sequence points and to support threaded programming.