разница между c99 и c11

Я изучаю c, в настоящее время. Книга, которую я прочитал, основана на C99. Я хочу обновить свои знания до C11 после прочтения этой книги или изменить ресурс, если есть существенная разница. Таким образом, то, что я прошу, является объяснением или ресурсом для обновления моих знаний. Я нашел только этот источник. Тем не менее, кажется, что он не содержит нужной мне информации или не является кратким.

Заранее спасибо. P.S: Я хочу выучить C11, так как я думаю, что сейчас это распространенный стандарт. Если нет, пожалуйста, сообщите мне.


person I am not good at finding name    schedule 15.07.2016    source источник
comment
Я не думаю, что вам следует слишком беспокоиться об этом на нынешнем этапе.   -  person Eugene Sh.    schedule 16.07.2016
comment
Ну, есть Википедия.   -  person yellowantphil    schedule 16.07.2016
comment
Около 12 лет доработок, после долгих переговоров. В первую очередь это дополнительные возможности, которые могут пригодиться в конкретных ситуациях; но, чтобы сохранить код C переносимым в следующую версию, в большинстве случаев вряд ли сломается код, который вы пишете в C99, или они потеряют свою базу разработчиков.   -  person Edwin Buck    schedule 25.08.2019


Ответы (2)


Хорошие обзоры стандарта C11:

Стандарт включает в себя несколько изменений в спецификациях языка и библиотек C99, таких как:

  • Спецификация выравнивания (спецификатор _Alignas, оператор _Alignof, функция aligned_alloc, заголовочный файл <stdalign.h>)
  • Спецификатор функции _Noreturn и заголовочный файл <stdnoreturn.h>
  • Общие выражения с использованием ключевого слова _Generic. Например, следующий макрос cbrt(x) преобразуется в cbrtl(x), cbrt(x) или cbrtf(x) в зависимости от типа x:

    #define cbrt(x) _Generic((x), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(x)
    
  • Поддержка многопоточности (спецификатор класса хранения _Thread_local, заголовок <threads.h>, включающий функции создания/управления потоком, мьютекс, условную переменную и функции хранения для конкретного потока, а также квалификатор типа _Atomic и <stdatomic.h> для непрерывного доступа к объектам).

  • Улучшенная поддержка Unicode на основе C Unicode Technical Report ISO/IEC TR 19769:2004 (типы char16_t и char32_t для хранения данных в кодировке UTF-16/UTF-32, включая функции преобразования в <uchar.h> и соответствующие префиксы строковых литералов u и U, а также префикс u8 для UTF-8 закодированных литералов).
  • Удаление функции gets, объявленной устаревшей в предыдущей версии стандарта языка C, ISO/IEC 9899:1999/Cor.3:2007(E), в пользу новой безопасной альтернативы, gets_s.
  • Интерфейсы проверки границ (Приложение K).
  • Особенности анализируемости (Приложение L).
  • Дополнительные макросы для запроса характеристик типов с плавающей запятой, касающихся субнормальных чисел с плавающей запятой и количества десятичных цифр, которые тип может хранить.
  • Анонимные структуры и объединения, полезные, когда объединения и структуры вложены друг в друга, например. в struct T { int tag; union { float x; int n; }; };.
  • Статические утверждения, которые оцениваются во время перевода на более позднем этапе, чем #if и #error, когда переводчик понимает типы.
  • Эксклюзивный режим создания и открытия (суффикс "…x") для open. Это ведет себя как O_CREAT|O_EXCL в POSIX, который обычно используется для блокировки файлов.
  • Функция quick_exit как третий способ завершения программы, предназначенный для выполнения хотя бы минимальной деинициализации в случае сбоя завершения с помощью exit.
  • Макросы для построения комплексных значений (отчасти потому, что real + imaginary*I может не дать ожидаемого значения, если imaginary бесконечно или NaN).
person Evgeny Karkan    schedule 15.07.2016

Согласно самому стандарту C 2011, вот основные изменения по сравнению с C99:

Foreword
...
6     This third edition cancels and replaces the second edition, ISO/IEC 9899:1999, as corrected by ISO/IEC 9899:1999/Cor 1:2001, ISO/IEC 9899:1999/Cor 2:2004, and ISO/IEC 9899:1999/Cor 3:2007. Major changes from the previous edition include:

     — conditional (optional) features (including some that were previously mandatory)

     — support for multiple threads of execution including an improved memory sequencing model, atomic objects, and thread-local storage (<stdatomic.h> and <threads.h>)

     — additional floating-point characteristic macros (<float.h>)

     — querying and specifying alignment of objects (<stdalign.h>, <stdlib.h>)

     — Unicode characters and strings (<uchar.h>) (originally specified in ISO/IEC TR 19769:2004)

     — type-generic expressions

     — static assertions

     — anonymous structures and unions

     — no-return functions

     — macros to create complex numbers (<complex.h>)

     — support for opening files for exclusive access

     — removed the gets function (<stdio.h>)

     — added the aligned_alloc, at_quick_exit, and quick_exit functions (<stdlib.h>)

     — (conditional) support for bounds-checking interfaces (originally specified in ISO/IEC TR 24731−1:2007)

     — (conditional) support for analyzability
person John Bode    schedule 15.07.2016
comment
Ссылка на проект N1570 стандарта C11. Между этим проектом и окончательным выпущенным стандартом были внесены некоторые очень незначительные изменения. - person Keith Thompson; 16.07.2016
comment
Сам стандарт C11 доступен только для покупки, поэтому для таких людей, как я, @JohnBode и широкой публики, N1570 — лучшее, что у нас есть для C11 (без оплаты). См. ISO/IEC 9899 - Языки программирования - C - person Jeremiah Peschka; 21.08.2019