В декабре 2011 года был утверждён стандарт ISO/IEC 9899:2011, он же C11 или C1X, новый стандарт для языка программирования C.

Дэнни Калев (Danny Kalev), бывший член комитета стандартизации C++, вкратце объясняет, в чём суть главных нововведений в C11: новая модель памяти для лучшей поддержки многопоточности, анонимные структуры и объединения и многие другие функции, которые уже присутствуют в C++.

Некоторые обязательные функции C99 становятся опциональными в C11 (массивы переменной длины, комплексный тип данных и др.), но добавляются некоторые функции C++. Комитеты C и C++ плотно сотрудничали, чтобы обеспечить максимальную совместимость языков.

C11 принят через 13 лет после C99 и должен устранить проблемы, которые появились с прошлой версией стандарта, пишет Калев. Дело в том, что C99 был слишком инновационным, в нём реализовано настолько много новых функций, что до сих пор трудно найти хотя бы один компилятор, которой бы поддерживал их все.

Проблемы возникли из-за того, что некоторые обязательные функции C99 оказалось трудно реализовать на некоторых платформах. Другие были признаны спорны��и или экспериментальными до такой степени, что некоторые вендоры (например, Microsoft) дошли до того, чтобы советовать программистам C перейти на C++.

Свою лепту в плохое восприятие C99 внесла и политика: не секрет, что в конец 90-х комитеты по стандартизации C и C++ недостаточно сотрудничали, мягко говоря. Хорошие новости в том, говорит Калев, что сейчас это сотрудничество стало гораздо лучше, так что C11 избежал ошибок дизайна, сделанных в C99.

Безопасное программирование


Безопасность кода C всегда была предметом беспокойства. Функции обработки строк без проверки границ и функции файлового ввода/вывода без проверки аргументов были постоянным источником уязвимостей для вредоносных программ.

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

Дополнительно, C11 содержит поддержку Unicode, соответствует стандарту IEC 60559 для представления чисел с плавающей запятой и комплексных чисел, анонимные структуры и объединения, выравнивание данных, спецификатор функции _Noreturn и самое главное — поддержку многопоточности.