Namespaces
Variants

ckd_add

From cppreference.net
Defined in header <stdckdint.h>
#define ckd_add( result, a, b ) /* implementation-defined */

// exposed interface:

bool ckd_add ( type1 * result, type2 a, type3 b ) ;
(since C23)

Computes the addition x + y and stores the result into * result . The addition is performed as if both operands were represented in a signed integer type with infinite range, and the result was then converted from this integer type to type1 . If the value assigned to * result correctly represents the mathematical result of the operation, it returns false . Otherwise, it returns true . In this case, the value assigned to * result is the mathematical result of the operation wrapped around to the width of * result .

Contents

Parameters

a, b - integer values
result - address of where result should be stored

Return value

false if the value assigned to * result correctly represents the mathematical result of the addition, true otherwise.

Note

Both type2 and type3 shall be any integer type other than “plain” char , bool , a bit-precise integer type , or an enumerated type , and they can be the same. * result shall be a modifiable lvalue of any integer type other than “plain” char , bool , a bit-precise integer type, or an enumerated type.

It is recommended to produce a diagnostic message if type2 or type3 are not suitable integer types, or if * result is not a modifiable lvalue of a suitable integer type.

Example

References

  • C23 standard (ISO/IEC 9899:2024):
  • 7.20.1 The ckd_ checked integer operation macros (p: 311)

See also

(C23)
checked subtraction operation on two integers
(type-generic function macro)
(C23)
checked multiplication operation on two integers
(type-generic function macro)