C99

C99

C99 — современный стандарт языка программирования Си. Определен в ISO/IEC 9899:1999, современная версия - ISO/IEC 9899:1999/Cor 3:2007 от 2007-11-15. Является развитием стандарта C90.

Содержание

История

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

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

В C99 было добавлено несколько новых возможностей, многие из которых уже были реализованы в качестве расширения в некоторых компиляторах:

  • встраиваемые функции (объявленные с ключевым словом inline)
  • Место, в котором возможно объявление переменных, больше не ограничено глобальной областью видимости и началом составного оператора (блока)
  • Несколько новых типов данных, включая long long int, дополнительные расширенные целые типы, явный логический тип данных, а также комплексный тип (complex) для представления комплексных чисел
  • Массивы переменной длины (variable-length arrays)
  • Поддержка однострочных комментариев, начинающихся с //, как в BCPL или C++
  • Новые библиотечные функции, как, например, snprintf
  • Новые заголовочные файлы, такие как stdbool.h и inttypes.h
  • Типовые математические функции (tgmath.h)
  • Улучшена поддержка стандарта IEEE 754-2008
  • Проектируемые инициализаторы
  • Составные константы
  • Поддержка вариативных макросов (макросов переменной арности)
  • Смягчение (restrict) ограничений для более агрессивной оптимизации кода

Обратная совместимость с C90

C99 является большей частью обратно совместимым с C90, но вместе с тем в некоторых случаях является более жёстким. В частности, объявление без указания типа больше не подразумевает неявное задание типа int. Комитет по стандартизации языка Си решил, что для компиляторов будет более важным определять пропуск по невнимательности указания типа, чем «тихая» обработка старого кода, полагавшаяся на неявное указание int. На практике же, компиляторы могли определять неуказание, но также допускали, что это int и продолжали компиляцию программы.

Поддержка распространёнными компиляторами

GCC и другие компиляторы языка Си поддерживают многие нововведения стандарта C99. Тем не менее, ощущается недостаточная поддержка стандарта со стороны крупных производителей средств разработки, таких как Microsoft и Borland, которые сосредоточились, в основном, на языке C++, так как C++ обеспечивает функциональность, схожую с предоставляемой нововведениями стандарта.

GCC, невзирая на его расширенную поддержку C99, все ещё является не полностью совместимой реализацией: некоторые особенности не реализованы или работают некорректно.[1]

Согласно Sun Microsystems, Sun Studio (которое доступно для свободного скачивания) уже полностью поддерживает стандарт C99.[2]

Интерпретатор языка Си Ch поддерживает основные особенности C99 [3] и свободно доступен в версиях для Windows, Linux, Mac OS X, Solaris, QNX и FreeBSD.

Определение версии

Стандартный макрос __STDC_VERSION__ определенный со значением 199901L, указывает, что поддержка C99 доступна. Как и макрос __STDC__ для C90, макрос __STDC_VERSION__ может быть использован для написания кода, который будет компилироваться компиляторами C90 и C99 по-разному. Ниже приведен пример, в котором с помощью макроса __STDC_VERSION__ проверяется, является ли inline ключевым словом.

#if __STDC_VERSION__ >= 199901L
  /* "inline" is a keyword */
#else
#define inline /* nothing */
#endif

Направления развития стандарта

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

В 2007 началась работа над заготовкой новой ревизии стандарта языка Си, неофициально называемой «C1x». Комитет по стандартизации языка Си поддержал стратегию, которая должна ограничить включение новых наработок, не «обкатанных» существующими реализациями.

Скорее всего, стандартная функция gets, которая была официально признана нерекомендуемой к использованию из-за многочисленных отчётов о проблемах касательно небезопасно спроектированного интерфейса, не будет включена в следующую ревизию стандарта языка Си.

См. также

Примечания

  1. Статус поддержки нововведений стандарта C99 в GCC. Free Software Foundation, Inc. (22 ноября 2007). Архивировано из первоисточника 19 марта 2012. Проверено 9 января 2008.
  2. Sun Studio 12: C Compiler 5.9 Readme. Sun Microsystems, Inc. (31 мая 2007). Архивировано из первоисточника 19 марта 2012. Проверено 9 января 2008.
  3. C/C++ interpreter Ch C99 features. SoftIntegration, Inc. (15 февраля 2008). Архивировано из первоисточника 19 марта 2012. Проверено 15 февраля 2008.

Дополнительные источники


Предшественник:
C89
Стандарты языка Си
Преемник:
C1X

Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "C99" в других словарях:

  • C99 — is a modern dialect of the C programming language. History After the ANSI standardization process, the C language specification remained relatively static for some time, whereas C++ continued to evolve, largely during its own standardization… …   Wikipedia

  • C99 — Inhaltsverzeichnis 1 K R C 2 C89, C90 3 C95 4 C99 5 Beispiele für den Unterschied zwischen verschiedenen Fassungen der Sprache C 6 Weblinks …   Deutsch Wikipedia

  • C99 — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom.   Sigles d’une seule lettre   Sigles de deux lettres > Sigles de trois lettres   Sigles de quatre lettres …   Wikipédia en Français

  • C99 (disambiguation) — C99 may refer to : * C99, the modern dialect of the C programming language * a C compiler for the Texas Instruments TI 99/4A home computer * Ruy Lopez chess openings ECO code * HMS Blake (C99), a 1945 British Royal Navy cruiser * a model of… …   Wikipedia

  • C99 — ● np. m. ►LANG Version normalisée par l ISO du langage C définie en 1999. Les améliorations sont tellement nombreuses que cette version est devenue incompatible avec le C++. À l heure actuelle, seules certaines versions de compilateurs libres… …   Dictionnaire d'informatique francophone

  • HMS Blake (C99) — was a guided missile cruiser of the Tiger class of the Royal Navy, the last of the Royal Navy cruisers. She was named after Admiral Robert Blake, a 17th century admiral who was the Father of the Royal Navy . She was ordered in 1942 as one of the… …   Wikipedia

  • C (programming language) — C The C Programming Language[1] (aka K R ) is the seminal book on C …   Wikipedia

  • Си (язык программирования) — У этого термина существуют и другие значения, см. Си. Запрос «Язык программирования Си» перенаправляется сюда; см. также другие значения. Си Класс языка: процедурный Тип исполнения: компилируемый Появился в: 1969 1973 Автор( …   Википедия

  • Varianten der Programmiersprache C — Seit dem Erscheinen der Programmiersprache C im Jahre 1972 wurden mehrere Varianten (Spezifikationen und internationale Standards) veröffentlicht. Inhaltsverzeichnis 1 K R C 2 C89, C90 2.1 Wichtigste Neuerungen von C90 …   Deutsch Wikipedia

  • Comparison of programming languages (basic instructions) — Programming language comparisons General comparison Basic syntax Basic instructions Arrays Associative arrays String operations …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»