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)  |  
alignas (removed in C23)  |  
stdalign.h  | 
_Alignof (C11)  |  
alignof (removed in C23)  |  
stdalign.h  | 
_Atomic (C11)  |  
atomic_bool, atomic_int, ...  |  
stdatomic.h  | 
_BitInt (C23)  |  (no macro) | |
_Bool (C99)  |  
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)  |  
noreturn  |  
stdnoreturn.h  | 
_Static_assert (C11)  |  
static_assert (removed in C23)  |  
assert.h  | 
_Thread_local (C11)  |  
thread_local (removed in C23)  |  
threads.h  | 
Also, 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:
| C++ documentation for C++ keywords | 
    © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
    https://en.cppreference.com/w/c/keyword