TGViewer
.рубик .рубик @dotrubic · 862 subscribers
Post #131 359
Тут готовится новый стандарт C - C2X (X, поскольку неизвестно, когда именно его выпустят).

Из интересный фичей, что точно в него войдут:
Функции strdup и stdndup - внезапно, их не было в стандартной либе.

Атрибуты - ура, наконец-то будет единый красивый способ задавать атрибуты переменным вместо уродских __attribute__ и __declspec.
Выглядеть будет примерно так: [[attr1]] struct [[attr2]] S { } [[attr3]] s1 [[attr4]], s2 [[attr5]];. Здесь attr1 относится к идентификаторам s1 и s2, attr2 относится к определению struct S, attr3 — к типу struct s1, attr4 — к идентификатору s1, attr5 — к идентификатору s2.
Из уже предложенных атрибутов: deprecated, fallthrough для использования в свичах, nodiscard, maybe_unused, noreturn.

Запретят K&R (объявление типов после "скобочек") способ указания аргументов функий. Больше нельзя будет сделать так: long maxl (a, b) long a, b; {return ...;}.

Знаковые целые числа будут всегда считаться представленными дополнительным кодом.

Также есть ряд предложений, которые коммитет еще не принял, но они находятся в работе и скорее всего будут приняты:
Включение бинарных блобов сразу в исполняемый файл без танцев с бубном!
const int music[] = {
#embed int "music.wav"
};

Добавятся ключевые слова true, false, и заменятся alignas, alignof, bool, thread_local, static_assert вместо их же вариантов, но с нижним подчеркиванием в начале.

Можно будет задавать функции с безымянными параметрами: int main(int, char *[]) { return 0; }

Добавление полноценного nullptr, эквивалентного ((void*)0), и при приведении типов остающегося указателем.

Большая реформа обработки ошибок в стандартной либе. Предлагается из функции-шаблона генерировать четыре варианта функции, каждый из которых будет использоваться на усмотрение компилятора в зависимости от того, как её используется програмист.

И, наконец, пара изменений, которые не оформлены в предложения, однако члены комитета намелаки, что работа над ними ведется:
Вынос оператора typeof в стандарт, а не частные реализации в компиляторах.

И оператор defer, копирующая ключевое слово из Go, позволяющий выполнять какие-то действия по окончанию области видимости переменной.
Формально, некоторые компиляторы уже поддерживают такой атрибут (__attribute__((cleanup(free))) char *s = malloc(sizeof(*s));), но в стандарте о такой возможности ничего не говорилось.

Подробней - в оригинальной статье на хабре.
More from @dotrubic
  1. Aug 26, 2026Поучаствовал в этом году в составлении хак-квеста для проходки на ZeroNights) Залетайте по…
  2. Jul 14, 2026Your friendly telegram changelog here! Дуров опять придумал всратую херню! Повод выйти из…
  3. Nov 27, 2024У меня тут произошел инцидент: какой-то хмырь скопировал мой профиль и стучался к людям в…
  4. Oct 18, 2024В конце августа мы сделали силами нашей команды CTF для Островка!, а потом вместе с @greg0…
  5. Jul 9, 2024Тут на гитхабе разворачивается очередная дРаМа. Если вкратце: есть в экосистеме питона так…
  6. Jul 7, 2024Сидел я сегодня такой, развлекался с Nix'ом и внезапно обнаружил, что конструкции вида nix…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →