C言語/標準ライブラリ/stdckdint.h
表示
整数の検査付き算術演算 <stdckdint.h>
[編集]<stdckdint.h>
ヘッダーは、C言語の標準ライブラリの一部であり、検査付き整数の算術演算を実行するためのいくつかのマクロを定義しています[1]。
__STDC_VERSION_STDCKDINT_H__
マクロは、202311Lに相当する値を持つ整数定数式です。
整数演算マクロ ckd_
[編集]- 概要
#include <stdckdint.h> bool ckd_add(type1 *result, type2 a, type3 b); bool ckd_sub(type1 *result, type2 a, type3 b); bool ckd_mul(type1 *result, type2 a, type3 b);
- 説明
- これらのマクロは、
a
とb
の数学的な値の加算、減算、または乗算を実行し、操作の結果を*result
に格納します(つまり、*result
にはa + b
、a - b
、またはa * b
の計算結果が代入されます)。各操作は、両オペランドが無限の範囲を持つ符号付き整数型で表されているかのように実行され、その後、この整数型からtype1
に変換された結果が得られます。 type2
およびtype3
は、"plain" char、bool、ビット精度の整数型、または列挙型を除く任意の整数型である必要があり、同じである必要はありません。*result は、"plain" char、bool、ビット精度の整数型、または列挙型ではない任意の整数型の修正可能な左辺値(lvalue)でなければなりません。- 推奨される慣習
type2
またはtype3
が適切な整数型でない場合、または*result
が適切な整数型の修正可能な lvalue でない場合、診断メッセージを生成することが推奨されます。- 戻り値
- これらのマクロが
false
を返す場合、*result に割り当てられた値は操作の数学的結果を正しく表しています。それ以外の場合、これらのマクロはtrue
を返します。この場合、*result
に割り当てられた値は、*result
の幅にラップされた操作の数学的結果です。- 例
a
とb
が signed int 型の値であり、result が signed long 型の場合、ckd_sub(&result, a, b);
- は
a
-b
をsigned long
として表現できるかどうかを示します。signed long
がsigned int
よりも幅が広い場合、これは常に可能であり、このマクロはfalse
を返します。
歴史
[編集]ヘッダー <stdckdint.h>
は、ISO/IEC 9899:2023(通称:C23)で追加される予定。
脚註
[編集]- ^ N3096 working draft — April 1, 2023 ISO/IEC 9899:2023 (E). ISO/IEC JTC1/SC22/WG14. p. 311, §7.20 Checked Integer Arithmetic .