TGViewer
C++ Academy C++ Academy @cpluspluc · 15.5K subscribers
Post #1469 4.22K
C23 был-то добавилен checked integer arithmetic

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

Теперь в C23 для этого появился заголовок:


#include <stdckdint.h>

И функции вроде ckd_mul:

#include <stdckdint.h>
#include <stdint.h>
#include <stdio.h>

int main(void) {
int32_t price = 500000;
int32_t qty = 8000;
int32_t total;

if (ckd_mul(&total, price, qty)) {
puts("overflow caught, not shipped");
return 1;
}

printf("total: %d\n", total);
}


Смысл простой: если результат помещается в тип, он записывается в total.
Если произошло переполнение, функция возвращает true.

Это особенно полезно в коде, где числа приходят извне:

• размеры буферов
• цены и количества
• индексы
• длины массивов
• расчёт памяти
• сетевые пакеты
• парсеры бинарных форматов

Раньше такие проверки часто писали руками, и там легко ошибиться на границах типа.
Теперь стандартная библиотека даёт нормальный способ сказать: «умножь, но не дай мне случайно получить мусор из-за overflow».

Маленькое изменение в стандарте, но для системного кода очень приятное.
  • 👍 25
  • ❤ 4
  • 🥰 2
More from @cpluspluc
  1. Sep 30, 2026✔️ В C/C++ есть любопытный трюк с AVX-512: `_mm512_maskz_loadu_epi8`. Инструкция может выб…
  2. Sep 28, 2026C23 сделал enum в C заметно удобнее для низкоуровневого кода. Раньше базовый тип перечисле…
  3. Sep 26, 2026Minimum-Cost Maximum-Flow всего в ~110 строках C++ Хороший компактный пример одного из сам…
  4. Sep 25, 2026🐧 Linux Cheat Sheet - шпаргалка по командам Linux Самая удобная шпаргалка по Linux и Bash…
  5. Sep 24, 2026photo post
  6. Sep 24, 2026`🤖 В SourceCraft появилась команда цифровых разработчиков Агентам можно назначать задачи…
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 →