Си 23

Как-то незаметно вышел Си23. В компиляторе GCC 15 даже решили использовать его по-умолчанию. К слову, у языка какая-то странная нумерация. Получается, что Си89 старше, чем 23 и 99. Вам это голову не ломает?

Посмотрел список изменений, в глаза мне бросилось следующее.

Удалили старый синтаксис функций, где можно было описывать типы аргументов после определения функций. А я про него и узнал-то только недавно — два года назад.

Атрибуты функций можно теперь писать в синтаксисе Си++, то есть в виде [[атрибут]]. Это очень хорошо. Так они лучше различимы, в отличие от спецификаторов, и имеют собственное пространство имён.

Изменили действие ключевого слова auto. В Си оно обозначало класс хранения, причём по-умолчанию он как раз auto, так что в живом сишном коде я никогда это слово не видел. Теперь оно будет означать автоматический вывод типа переменной, прямо как в Си++. Это хорошо — со временем из кода можно будет выкинуть __auto_type.

Функции с пустым списком аргументов будут обрабатываться, как функции без аргументов. Это тоже хорошо, потому что раньше было неочевидно. В своё время для меня открытием было, что функции без аргументов должны в Си задаваться через синтаксис func(void), правда я в коде так всё равно не делаю.

Прекращена поддержка триграфов. Это, конечно, хорошо, но жалко. Речь идёт об альтернативных конструкциях в языке, которые были введены когда-то для поддержки некого древнего оборудования. Например, ??/ это альтернативный синтаксис для обратного слеша. Триграфы приводили к редким багам парсинга, пугали народ, но их было весело использовать в своих проектах.

Добавили конструкцию #embed, которая позволяет включать в код бинарные данные. Тоже здорово, в игре «Морской бой», выпущенной ко Дню радио мне пришлось включать игру на Луа внутрь сишного кода внешними утилитами, а теперь можно это делать одной директивой.

Остальные изменения тоже полезны, буду знакомиться, но эмоционального отклика не вызвали.

Комментарии 10

Креведко Медведев № 5
С версиями ПО слово «старше» имеет два противоположных значения, так что 23 и 99 путаницы уже не добавляет 🤷🏼‍♂️
Александр Тесанов № 7
Год релиза же. :)
1989, 1999, 2023

Вообще, чистый C — только для олдфагов, ну или для программирования микроконтроллеров, для которых это единственный поддерживаемый язык.

C++ всё же поприятнее во всех отношениях.
Если не умничать, а писать с использованием минимально возможного набора фич C++. (К сожалению, на C++ очень легко писать нечитаемый код, и слишком многие так и делают).
Евгений Степанищев автор № 8

Что это год релиза я понимаю, но ему две цифры оставили и логика поехала.

Вообще, чистый Си — только для олдфагов, ну или для программирования микроконтроллеров, для которых это единственный поддерживаемый язык.

Ну я на Си пишу для Флиппера Зиро и The Sensor Watch, например. Там ничего другого нет. Для Флиппера появился mJS, но в нормальное приложение программу на нём не оформишь. Там отдельная папка, даже без иконок.

Олдфагов в мире, видимо, очень много: https://habr.com/ru/companies/ssp-soft/articles/821663/

Александр Тесанов № 9
Олдфагов в мире, видимо, очень много

Я думаю, что бОльшая часть этого всего — всякое легаси. И микроконтроллеры :)

Помню, доводилось мне программировать на языке, разработанном одной несуществующей ныне североамериканской компанией (на «N» начинается) для собственной платформы на которой строилось много какое телеком оборудование.

Так вот.

В какой-то момент старое железо перестало справляться. И понадобилось перейти на новое. И оказалось, что дешевле (на порядки!) построить на новом железе эмулятор старой платформы и перенести туда систему, написанную на чудо-языке почти «как есть», чем переводить всё на другой язык.