Ответ 1
Хорошие обзоры стандарта C11:
- https://en.wikipedia.org/wiki/C11_(C_standard_revision)
- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
- https://smartbear.com/blog/test-and-monitor/c11-a-new-c-standard-aiming-at-safer-programming/
Стандарт включает несколько изменений в спецификации языка и библиотеки 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 на основе Технического отчета Unicode C 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
).