Ключевые слова в 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
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 распознает следующие ключевые слова и особые идентификаторы.
__asm
5
__based
3, 5
__cdecl
5
__declspec
5
__except
5
__fastcall
__finally
5
__inline
5
__int16
5
__int32
5
__int64
5
__int8
5
__leave
5
__restrict
__stdcall
5
__try
5
__typeof__
__typeof_unqual__
dllexport
4
dllimport
4
naked
4
static_assert
6
thread
4
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
и поэтому не требуют двойного знака подчеркивания. Для всех остальных ключевых слов поддерживаются версии с одним символом подчеркивания. Это сделано для обеспечения обратной совместимости.