Type support

From cppreference.com
< c

See also type system overview and arithmetic types defined by the language.

Basic types

Additional basic types and convenience macros

Defined in header <stddef.h>
unsigned integer type returned by the sizeof operator
(typedef)
signed integer type returned when subtracting two pointers
(typedef)
(C23)
the type of the predefined null pointer constant nullptr
(typedef)
implementation-defined null pointer constant
(macro constant)
(C11)
a type with alignment requirement as great as any other scalar type
(typedef)
byte offset from the beginning of a struct type to specified member
(function macro)
Defined in header <stdbool.h>
bool
(C99)(removed in C23)
convenience macro, expands to _Bool
(keyword macro)
true
(C99)(removed in C23)
expands to integer constant 1
(macro constant)
false
(C99)(removed in C23)
expands to integer constant 0
(macro constant)
__bool_true_false_are_defined
(C99)(deprecated in C23)
expands to integer constant 1
(macro constant)
Defined in header <stdalign.h>
alignas
(C11)(removed in C23)
convenience macro, expands to keyword _Alignas
(keyword macro)
alignof
(C11)(removed in C23)
convenience macro, expands to keyword _Alignof
(keyword macro)
__alignas_is_defined
(C11)(removed in C23)
expands to integer constant 1
(macro constant)
__alignof_is_defined
(C11)(removed in C23)
expands to integer constant 1
(macro constant)
Defined in header <stdnoreturn.h>
noreturn
(C11)(deprecated in C23)
convenience macro, expands to _Noreturn
(keyword macro)

Fixed width integer types (since C99)

Numeric limits

Notes

The type of true and false is int rather than _Bool

A program may undefine and perhaps then redefine the macros bool, true and false

(since C99)
(until C23)

The type of true and false is bool. It is unspecified whether any of bool, _Bool, true, or false

If bool, true, or false (but not _Bool

(since C23)

Example

#include <stdalign.h>
#include <stdbool.h>
#include <stdio.h>
 
int main(void)
{
    printf("%d %d %d\n", true && false, true || false, !false);
    printf("%d %d\n", true ^ true, true + true);
    printf("%zu\n", alignof(short));
}

Possible output:

0 1 1
0 2
2

References

  • C23 standard (ISO/IEC 9899:2024):
  • 7.15 Alignment <stdalign.h> (p: TBD)
  • 7.18 Boolean type and values <stdbool.h> (p: TBD)
  • 7.19 Common definitions <stddef.h> (p: TBD)
  • 7.23 _Noreturn <stdnoreturn.h> (p: TBD)
  • 7.31.9 Boolean type and values <stdbool.h> (p: TBD)
  • C17 standard (ISO/IEC 9899:2018):
  • 7.15 Alignment <stdalign.h> (p: 196)
  • 7.18 Boolean type and values <stdbool.h> (p: 210)
  • 7.19 Common definitions <stddef.h> (p: 211)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 263)
  • 7.31.9 Boolean type and values <stdbool.h> (p: 332)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.15 Alignment <stdalign.h> (p: 268)
  • 7.18 Boolean type and values <stdbool.h> (p: 287)
  • 7.19 Common definitions <stddef.h> (p: 288)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 361)
  • 7.31.9 Boolean type and values <stdbool.h> (p: 456)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.18 Boolean type and values <stdbool.h> (p: 253)
  • 7.19 Common definitions <stddef.h> (p: 254)
  • 7.26.7 Boolean type and values <stdbool.h> (p: 401)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.1.5 Common definitions <stddef.h>

See also

C++ documentation for Type support library