Идентификаторы используются для обозначения элементов программы - переменных, функций, типов данных, констант и т.д. Чтобы не было путаницы, каждый элемент должен иметь уникальное имя в пределах своей области видимости. При компиляции идентификатор переменной или функции будет связан с адресом той области памяти, в которой она хранится.
Идентификатор - это последовательность букв, символов подчеркивания и цифр, начинающая с буквы или символа подчеркивания. Регистр букв важен, идентификаторы ``a`` и ``A`` считаются различными. В идентификаторы можно включать буквы национальных языков, записывая их в кодировке Unicode в форме ``\u`` *(4 шестнадцатеричные цифры UTF-16)* или ``\U`` *(8 шестнадцатеричных цифр UTF-32)*, например, \u042F заменяет букву ``Я``.
Некоторые идентификаторы являются зарезервированными:
```text
auto break case char const continue
default do double else enum extern
float for goto if inline int
long register restrict return short signed
sizeof static struct switch typedef union
unsigned void volatile while __func__
_Alignas _Alignof _Atomic _Bool _Complex _Imaginary
_Generic _Noreturn _Static_assert _Thread_local
```
Современные компиляторы позволяют использовать в идентификаторах буквы национальных языков без кодирования. Не рекомендуется использовать идентификаторы, начинающиеся с подчеркивания и прописной латинской буквы или с двух подчеркиваний, так как такие идентификаторы могут стать резервированными в следующих версиях компилятора или используются для расширения языка некоторыми компиляторами (например, нестандартный тип данных для 128-битного целого числа называется ``__int128``).