🔧 C23 ・ stdckdint.h ・ C23
ckd_sub の使い方bool ckd_sub(type1 *result, type2 a, type3 b);
整数の減算をオーバーフローの有無を検出しながら実行するC23の型総称マクロ。ckd_addと同じ使い方で、結果とオーバーフローの有無を同時に安全に得られる。 符号付き・符号無しどちらの整数型にも同じマクロ名で対応できる、C23で導入された型総称機能を活用した関数。
#include <stdckdint.h>
#include <stdio.h>
int main(void) {
unsigned int result;
bool overflow = ckd_sub(&result, 3u, 5u);
printf("%d %u\n", overflow, result);
return 0;
}
⚠️ 符号無し整数の減算では、負になるケースが「オーバーフロー」として検出される。判定を忘れると巨大な値を誤って使ってしまう。trueが返ったときは、resultに入っている値を計算結果として使わない。
アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ
ckd_sub と一緒に使う関数ckd_add
ckd_mul
free_aligned_sized
free_sized
stdc_bit_ceil
stdc_bit_floor
stdc_bit_width
stdc_count_ones
stdc_count_zeros
stdc_has_single_bit
stdc_leading_zeros
stdc_trailing_zeros
strndup
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。