C keywords
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-token s . (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:
|
defined
|
The following tokens are recognized by the preprocessor when they are used outside the context of a preprocessor directive:
|
_Pragma (C99) |
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
|
C++ documentation
for
keywords
|