| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| conditionally-supported | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 inattribute-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, ortrue andfalse is implemented as a predefined macro.
Each name that begins with a double underscore__ or an underscore_ followed by an uppercase letter is reserved: seeidentifier for details.
Note that digraphs<%,%>,<:,:>,%:, and%:%: provide analternative way to represent standard tokens.
The following tokens are recognized by thepreprocessor when they are usedwithin the context of a preprocessor directive:
defined |
The following tokens are recognized by the preprocessor when they are usedoutside the context of a preprocessor directive:
_Pragma(C99) |
The following additional keywords are classified as extensions and conditionally-supported:
C++ documentation forkeywords |