◐ Shell
clean mode source ↗

C keywords - cppreference.com

From cppreference.com

This is a list of reserved keywords in C. Since they are used by the language, these keywords are not available for re-definition. As an exception, they are not considered reserved in attribute-tokens(since C23)

The most common keywords that begin with an underscore are generally used through their convenience macros:

Keyword Used as Defined in
_Alignas (C11)(deprecated in C23) alignas (removed in C23) stdalign.h
_Alignof (C11)(deprecated in C23) alignof (removed in C23) stdalign.h
_Atomic (C11) atomic_bool, atomic_int, ... stdatomic.h
_BitInt (C23) (no macro)
_Bool (C99)(deprecated in C23) bool (removed in C23) stdbool.h
_Complex (C99) complex complex.h
_Decimal128 (C23) (no macro)
_Decimal32 (C23) (no macro)
_Decimal64 (C23) (no macro)
_Generic (C11) (no macro)
_Imaginary (C99) imaginary complex.h
_Noreturn (C11)(deprecated in C23) noreturn stdnoreturn.h
_Static_assert (C11)(deprecated in C23) static_assert (removed in C23) assert.h
_Thread_local (C11)(deprecated in C23) thread_local (removed in C23) threads.h

Some keywords are deprecated and retained as alternative spellings for compatibility purposes. These can be used wherever the keyword can.

Keyword Alternative spelling
alignas (C23) _Alignas (C11)(deprecated in C23)
alignof (C23) _Alignof (C11)(deprecated in C23)
bool (C23) _Bool (C99)(deprecated in C23)
static_assert (C23) _Static_assert (C11)(deprecated in C23)
thread_local (C23) _Thread_local (C11)(deprecated in C23)

It is unspecified whether any of the spellings of these keywords, their alternate forms, or true and false is implemented as a predefined macro.

Each name that begins with a double underscore __ or an underscore _ followed by an uppercase letter is reserved: see identifier for details.

Note that digraphs <%, %>, <:, :>, %:, and %:%: provide an alternative way to represent standard tokens.

The following tokens are recognized by the preprocessor when they are used within the context of a preprocessor directive:

The following tokens are recognized by the preprocessor when they are used outside the context of a preprocessor directive:

The following additional keywords are classified as extensions and conditionally-supported:

References

  • C23 standard (ISO/IEC 9899:2024):
  • 6.4.1 Keywords (p: 53)
  • J.5.9 The fortran keyword (p: 601)
  • J.5.10 The asm keyword (p: 601)
  • C17 standard (ISO/IEC 9899:2018):
  • 6.4.1 Keywords (p: 42-43)
  • J.5.9 The fortran keyword (p: 422)
  • J.5.10 The asm keyword (p: 422)
  • C11 standard (ISO/IEC 9899:2011):
  • 6.4.1 Keywords (p: 58-59)
  • J.5.9 The fortran keyword (p: 580)
  • J.5.10 The asm keyword (p: 580)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.4.1 Keywords (p: 50)
  • J.5.9 The fortran keyword (p: 514)
  • J.5.10 The asm keyword (p: 514)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.1.1 Keywords
  • G.5.9 The fortran keyword
  • G.5.10 The asm keyword

See also