Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Си 23

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

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

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

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

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

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

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

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

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

4 комментария
hsh 10 дн

Получается, что Си89 и 99 старше, чем 23.

С людьми так же и как-то работает

Евгений Степанищев 10 дн

С людьми ещё работает, что 99 старше 89, а тут не так.

Чуть поправил.

Креведко Медведев 10 дн

С версиями ПО слово «старше» имеет два противоположных значения, так что 23 и 99 путаницы уже не добавляет 🤷🏼‍♂️

Евгений Степанищев 9 дн

Как это? То, что 89 одновременно больше и 99, и 23, не добавляет?

Александр Тесанов 5 дн

Год релиза же. :)
1989, 1999, 2023

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

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

Евгений Степанищев 5 дн

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

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

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

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

Александр Тесанов 3 дн

Олдфагов в мире, видимо, очень много

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

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

Так вот.

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

Евгений Степанищев 3 дн

Ну я даже не знаю. Линукс — это легаси?