Поделиться через


Ключевые слова в C

Ключевыми словами называются слова, которые имеют особое значение для компилятора C. На 7 и 8 этапах трансляции идентификатор не может иметь такое же написание и регистр записи, что и ключевое слово C. Дополнительные сведения см. в разделе Этапы преобразования Справочника по препроцессору. Дополнительные сведения об идентификаторах см. в этом разделе.

Ключевые слова стандартного языка C

В языке C используются следующие ключевые слова:

auto
break
case
char
const
continue
default
do
double
else
enum

extern
float
for
goto
if
inline 1, a
int
long
register
restrict 1, a
return

short
signed
sizeof
static
struct
switch
typedef
typeof
typeof_unqual
union
unsigned
void
volatile

while
_Alignas 2, a
_Alignof 2, a
_Atomic 2, b
_Bool 1, a
_Complex 1, b
_Generic 2, a
_Imaginary 1, b
_Noreturn 2, a
_Static_assert 2, a
_Thread_local 2, b

1 Ключевые слова, представленные в стандарте ISO C99.
2 Ключевые слова, представленные в стандарте ISO C11.
a Начиная с Visual Studio 2019 версии 16.8 эти ключевые слова поддерживаются в коде, скомпилированном как C, если указаны параметр компилятора /std:c11 или /std:c17.
b Начиная с Visual Studio 2019 версии 16.8 эти ключевые слова распознаются, но не поддерживаются компилятором в коде, скомпилированном как C, если указаны параметр компилятора /std:c11 или /std:c17.

Переопределить ключевые слова невозможно. Но с помощью директив препроцессора C можно определить текст, который будет использоваться вместо ключевых слов.

Ключевые слова C для систем Microsoft

Стандарты ANSI и ISO C позволяют зарезервировать идентификаторы, начинающиеся с двух символов подчеркивания, для реализаций компилятора. Поэтому в системах Microsoft действует соглашение, что используемые в них ключевые слова начинаются с двух символов подчеркивания. Эти слова невозможно использовать как имена идентификаторов. Описание правил именования идентификаторов, включая использование двойных знаков подчеркивания, см. в статье об идентификаторах.

Компилятор Microsoft C распознает следующие ключевые слова и особые идентификаторы.

__asm5
__based3, 5
__cdecl5
__declspec5
__except5
__fastcall
__finally5

__inline5
__int165
__int325
__int645
__int85
__leave5
__restrict

__stdcall5
__try5
__typeof__
__typeof_unqual__
dllexport4
dllimport4
naked4
static_assert6
thread4

3 Ключевое слово __based имеет ограниченное применение: в компиляциях для 32- и 64-разрядных платформ.
4 Если эти ключевые слова используются с ключевым словом __declspec, они являются особыми идентификаторами. В других контекстах они могут использоваться без ограничений.
5 Для совместимости с предыдущими версиями эти ключевые слова доступны как с двумя символами подчеркивания в начале, так и с одним при включении расширений Microsoft.
6 Если файл <assert.h> не включен, компилятор Microsoft Visual C сопоставляет static_assert с ключевым словом C11 _Static_assert.

Расширения Microsoft по умолчанию включены. Чтобы создать переносимый код, можно отключить расширения Майкрософт, указав параметр /Za (Отключить расширения языка) во время компиляции. При этом некоторые ключевые слова для систем Microsoft будут отключены.

Когда расширения Microsoft включены, в программах можно использовать перечисленные выше ключевые слова. Для соответствия стандарту языка большинство этих ключевых слов имеют ведущий двойной подчеркивание. Четыре исключения, dllexport, dllimport, naked и thread, используются только с ключевым словом __declspec и поэтому не требуют двойного знака подчеркивания. Для всех остальных ключевых слов поддерживаются версии с одним символом подчеркивания. Это сделано для обеспечения обратной совместимости.

См. также

Элементы языка C