В декабре 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
и самое главное — поддержку многопоточности.
Автор: alizar