C99
- 1 year ago
- 0
- 0
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 года. Международный стандарт Си поддерживается /WG14.
В C99 было добавлено несколько новых возможностей, многие из которых уже были реализованы в качестве расширения в некоторых компиляторах.
long long int
, дополнительные расширенные целые типы, явный
логический тип
данных, а также комплексный тип (
complex
) для представления
комплексных чисел
.
//
, как в
BCPL
или C++.
snprintf
.
stdbool.h
и
inttypes.h
.
tgmath.h
).
function((struct point){4,2})
).
int а[10] = { [0] = 100, [3] = 200}; struct mystruct {int a; int b; int c;} ob = { .c = 30, .a = 10 };
).
restrict
) ограничений для более агрессивной
оптимизации
кода.
C99 является большей частью обратно совместимым с C90, но вместе с тем в некоторых случаях является более жёстким. В частности, объявление без указания типа больше не подразумевает неявное задание типа
int
. Комитет по стандартизации языка Си решил, что для компиляторов будет более важным определять пропуск по невнимательности указания типа, чем «тихая» обработка старого кода, полагавшаяся на неявное указание
int
. На практике же, компиляторы могли определять неуказание, но также допускали, что это
int
и продолжали компиляцию программы.
GCC и другие компиляторы языка Си поддерживают многие нововведения стандарта C99. Тем не менее, ощущается недостаточная поддержка стандарта со стороны крупных производителей средств разработки, таких как Microsoft и Borland , которые сосредоточились, в основном, на языке C++, так как C++ обеспечивает функциональность, схожую с предоставляемой нововведениями стандарта.
GCC, невзирая на его расширенную поддержку C99, все ещё является не полностью совместимой реализацией: некоторые особенности не реализованы или работают некорректно.
Согласно Sun Microsystems , Sun Studio 9 и выше (которое доступно для свободного скачивания) сертифицирована под стандарт C99, для процессоров UltraSPARC, Intel x86, AMD 64. Также сертифицирована IBM XL C/C++, для процессоров Power PC. Есть сертифицированные трансляторы других фирм. Интерпретатор языка Си поддерживает основные особенности C99 и свободно доступен в версиях для 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 началась работа над заготовкой новой ревизии стандарта языка Си, неофициально называемой «C1 x ». Комитет по стандартизации языка Си поддержал стратегию, которая должна ограничить включение новых наработок, не «обкатанных» существующими реализациями.
Скорее всего, стандартная функция
gets
, которая была официально признана
нерекомендуемой к использованию
из-за многочисленных отчётов о проблемах касательно небезопасно спроектированного интерфейса, не будет включена в следующую ревизию стандарта языка Си.