# C keywords

From cppreference.com
< c

This is a list of reserved keywords in C. Since they are used by the language, these keywords are not available for re-definition.

`auto` `break` `case` `char` `const` `continue` `default` `do` `double` `else` `enum` `extern` | `float` `for` `goto` `if` `inline` (since C99) `int` `long` `register` `restrict` (since C99) `return` `short` | `signed` `sizeof` `static` `struct` `switch` `typedef` `union` `unsigned` `void` `volatile` `while` | `_Alignas` (since C11) `_Alignof` (since C11) `_Atomic` (since C11) `_Bool` (since C99) `_Complex` (since C99) `_Generic` (since C11) `_Imaginary` (since C99) `_Noreturn` (since C11) `_Static_assert` (since C11) `_Thread_local` (since C11)

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

keyword | used as | defined in
`_Alignas` (since C11) | `alignas` | `stdalign.h`
`_Alignof` (since C11) | `alignof` | `stdalign.h`
`_Atomic` (since C11) | `atomic_bool, atomic_int, ...` | `stdatomic.h`
`_Bool` (since C99) | `bool` | `stdbool.h`
`_Complex` (since C99) | `complex` | `complex.h`
`_Generic` (since C11) | (no macro) |
`_Imaginary` (since C99) | `imaginary` | `complex.h`
`_Noreturn` (since C11) | `noreturn` | `stdnoreturn.h`
`_Static_assert` (since C11) | `static_assert` | `assert.h`
`_Thread_local` (since C11) | `thread_local` | `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:

`if` `elif` `else` `endif` `defined` | `ifdef` `ifndef` `define` `undef` | `include` `line` `error` `pragma`

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

`_Pragma`(since C99)

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

`asm` `fortran`

### References

- C11 standard (ISO/IEC 9899:2011):

  - 6.4.1 Keywords (p: 58-59)

  - J.5 Common extensions (p: 579-581)

- C99 standard (ISO/IEC 9899:1999):

  - 6.4.1 Keywords (p: 50)

  - J.5 Common extensions (p: 511-513)

- C89/C90 standard (ISO/IEC 9899:1990):

  - 3.1.1 Keywords

  - G.5 Common extensions

### See also

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/keyword&oldid=102327"