По всем вопросам- @workakkk
РКН: clck.ru/3FmxJF
#VRHSZ
Post #1469
4.22K

C23 был-то добавилен checked integer arithmetic
В C долго приходилось руками писать однотипные helper-функции, чтобы безопасно проверять переполнение при сложении, вычитании или умножении.
Теперь в C23 для этого появился заголовок:
Смысл простой: если результат помещается в тип, он записывается в total.
Если произошло переполнение, функция возвращает true.
Это особенно полезно в коде, где числа приходят извне:
• размеры буферов
• цены и количества
• индексы
• длины массивов
• расчёт памяти
• сетевые пакеты
• парсеры бинарных форматов
Раньше такие проверки часто писали руками, и там легко ошибиться на границах типа.
Теперь стандартная библиотека даёт нормальный способ сказать: «умножь, но не дай мне случайно получить мусор из-за overflow».
Маленькое изменение в стандарте, но для системного кода очень приятное.
В 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















