Академический Документы
Профессиональный Документы
Культура Документы
Документация по языку C
Узнайте, как использовать C и библиотеку времени выполнения C.
a СКАЧАТЬ
g УЧЕБНИК
i ССЫЛКА
Справочник по компилятору
Справочник по компоновщику
Ошибки и предупреждения
Язык C
i ССЫЛКА
Справочник по языку C
Элементы языка C
Структура программы
Объявления и типы
Объявления и типы
Выражения и присваивания
Операторы
Функции
i ССЫЛКА
Глобальные константы
Глобальное состояние
См. также
Справочник по языку C++
Организация Справочника по языку C
Статья • 03.03.2023 • Чтение занимает 2 мин
Элементы языка C
Структура программы
Объявления и типы
Выражения и присваивания
Операторы
Функции
См. также
Справочник по языку C
Содержание данного руководства
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Организация Справочника по языку C
Соответствие ANSI
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Организация Справочника по языку C
Элементы языка C
Статья • 03.03.2023 • Чтение занимает 2 мин
Лексемы
Комментарии
Ключевые слова
Идентификаторы
Константы
Строковые литералы
См. также
Справочник по языку C
Токены C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
token :
keyword
identifier
constant
string-literal
operator
punctuator
7 Примечание
См. также
Элементы языка C
Пробелы
Статья • 26.09.2022 • Чтение занимает 2 мин
См. также
Токены C
Комментарии в C
Статья • 03.03.2023 • Чтение занимает 2 мин
*/
C
/* Comment out this routine for testing
/* Open file */
*/
Хотя с помощью комментариев можно скрывать часть кода для тестирования, для
этого есть полезная альтернатива: директивы препроцессора #if и #endif и
условная компиляция. Дополнительные сведения см. в статье Preprocessor
Directives (Директивы препроцессора) в справочника по препроцессору.
// my comment \
i++;
См. также
Токены C
Оценка токенов
Статья • 03.03.2023 • Чтение занимает 2 мин
i+++j
См. также
Токены C
Ключевые слова в C
Статья • 03.03.2023 • Чтение занимает 2 мин
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
union
unsigned
void
volatile
while
_Alignas2, a
_Alignof2, a
_Atomic 2, b
_Bool 1, a
_Complex 1, b
_Generic2, a
_Imaginary 1, b
_Noreturn 2, a
_Static_assert 2, a
_Thread_local 2, b
2
Ключевые слова, представленные в стандарте ISO C11.
__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
dllexport 4
dllimport 4
naked 4
static_assert 6
thread 4
3
Ключевое слово __based имеет ограниченное применение: в компиляциях для
32- и 64-разрядных платформ.
5
Для совместимости с предыдущими версиями эти ключевые слова доступны как с
двумя символами подчеркивания в начале, так и с одним при включении
расширений Microsoft.
6
Если файл <assert.h> не включен, компилятор Microsoft Visual C сопоставляет
static_assert с ключевым словом C11 _Static_assert .
См. также
Элементы языка C
Идентификаторы C
Статья • 03.03.2023 • Чтение занимает 3 мин
#include <stdio.h>
int main()
int result;
if ( result != 0 )
Синтаксис
identifier :
nondigit
identifier nondigit
identifier digit
_ a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
digit : один из следующих символов:
0 1 2 3 4 5 6 7 8 9
add
ADD
Add
aDD
count
temp1
top_of_page
skip12
LastNum
См. также
Элементы языка C
Многобайтовая кодировка и
расширенные символы
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Идентификаторы C
Триграфы
Статья • 03.03.2023 • Чтение занимает 2 мин
Последовательности триграфов
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
Триграф Знак препинания
??> }
??- ~
printf( "What??!\n" );
напечатанная строка имеет вид What| , так как ??! — это триграфическая
последовательность, которая заменяется символом | . Напишите инструкцию
следующим образом, чтобы правильно напечатать строку:
printf( "What?\?!\n" );
См. также
/Zc:trigraphs (подстановка триграфов)
Идентификаторы C
Константы в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
constant :
floating-point-constant
integer-constant
enumeration-constant
character-constant
См. также
Элементы языка C
Константы с плавающей запятой в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
floating-point-constant :
fractional-constant :
digit-sequence .
exponent-part :
+ -
digit-sequence :
digit
digit-sequence digit
f l F L
15.75
1.575E1 /* = 15.75 */
1575e-2 /* = 15.75 */
-2.5e-3 /* = -0.0025 */
25E-4 /* = 0.0025 */
float . Если суффикс представлен буквой l или L , константа относится к типу long
double . Пример:
Компилятор Майкрософт для C внутренне представляет long double так же, как и
тип double . Но типы различаются. Дополнительные сведения о типах double , float
и long double см. в статье Хранилище базовых типов.
.0075e2
0.075e1
.075e1
75e-2
FLT_DIG
Количество цифр q, при котором число с 6
DBL_DIG
плавающей запятой с q десятичными 15
FLT_EPSILON
Наименьшее положительное число x, при 1,192092896e-07F
DBL_EPSILON
котором x + 1,0 не равно 1,0. 2,2204460492503131e-016
LDBL_EPSILON 2,2204460492503131e-016
FLT_GUARD 0
FLT_MANT_DIG
Количество цифр для основания, 24
DBL_MANT_DIG
заданного константой FLT_RADIX, в 53
FLT_MAX
Максимальное представимое число с 3,402823466e+38F
DBL_MAX
плавающей запятой. 1,7976931348623158e+308
LDBL_MAX 1,7976931348623158e+308
FLT_MAX_10_EXP
Максимальное целое число, при котором 38
DBL_MAX_10_EXP
число 10, возведенное в степень этого 308
FLT_MAX_EXP
Максимальное целое число, при котором 128
DBL_MAX_EXP
значение FLT_RADIX, возведенное в 1024
FLT_MIN
Минимальное положительное значение. 1,175494351e-38F
DBL_MIN
2,2250738585072014e-308
LDBL_MIN 2,2250738585072014e-308
FLT_MIN_10_EXP
Минимальное отрицательное целое число, -37
DBL_MIN_10_EXP
при котором число 10, возведенное в -307
FLT_MIN_EXP
Минимальное отрицательное целое число, -125
DBL_MIN_EXP
при котором значение FLT_RADIX, -1021
FLT_NORMALIZE 0
FLT_RADIX
Основание экспоненциальной формы 2
_DBL_RADIX
представления. 2
_LDBL_RADIX 2
FLT_ROUNDS
Режим округления для сложения чисел с 1 (приблизительно)
_DBL_ROUNDS
плавающей запятой. 1 (приблизительно)
_LDBL_ROUNDS 1 (приблизительно)
См. также
Константы с плавающей запятой в C
Целочисленные константы в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
integer-constant :
decimal-constant :
nonzero-digit
decimal-constant digit
octal-constant :
0
octal-constant octal-digit
hexadecimal-constant :
hexadecimal-prefix hexadecimal-digit
hexadecimal-constant hexadecimal-digit
0x 0X
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
integer-suffix :
unsigned-suffix long-long-suffix
unsigned-suffix 64-bit-integer-suffix
64-bit-integer-suffix
u U
l L
ll LL
i64 I64
28
/* Decimal Constants */
/* Octal Constants */
/* Hexadecimal Constants */
См. также
Константы в C
Целочисленные типы
Статья • 03.03.2023 • Чтение занимает 2 мин
10L
79L
012L
0115L
0xaL or 0xAL
0X4fL or 0x4FL
776745UL
778866LU
Для десятичной константы без суффикса используется тип int , long int или
unsigned long int . Константе присваивается первый из этих 3 типов, в
котором возможно представление значения константы.
См. также
Целочисленные константы в C
Пределы целых чисел в C и C++
Статья • 03.03.2023 • Чтение занимает 2 мин
CHAR_MAX Максимальное значение для переменной типа –127 (или 255, если
char . используется параметр /J)
См. также
Целочисленные константы в C
Константы символов в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
character-constant :
c-char-sequence :
c-char
c-char-sequence c-char
c-char :
escape-sequence
escape-sequence :
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
\a \b \f \n \r \t \v
\' \" \\ \?
octal-escape-sequence :
\ octal-digit
\ octal-digit octal-digit
hexadecimal-escape-sequence :
\x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
См. также
Константы в C
Символьные типы
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Константы символов в C
Набор символов исполнения
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Константы символов в C
Escape-последовательность
Статья • 03.03.2023 • Чтение занимает 2 мин
Escape-последовательность
Escape- Представляет
последовательность
\a Звонок (предупреждение)
\b Backspace
\f Перевод страницы
\n Новая строка
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
#define assert(exp) \
См. также
Константы символов в C
Спецификации восьмеричных и
шестнадцатеричных символов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Константы символов в C
Строковые литералы в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
string-literal :
s-char-sequence :
s-char
s-char-sequence s-char
s-char :
любой член исходной кодировки, кроме двойных кавычек ( " ), обратной косой
черты ( \ ) или символа новой строки
escape-sequence
Комментарии
В этом примере показан простой строковый литерал:
См. также
Строковые литералы в C
Хранение строковых литералов
Статья • 03.03.2023 • Чтение занимает 2 мин
Примечания
Блок, относящийся только к системам Microsoft
См. также
Строковые литералы в C
Объединение строковых литералов
Статья • 03.03.2023 • Чтение занимает 2 мин
идентичен строке
Так как каждая часть строки заключается в двойные кавычки, части объединяются
и результат отображается в виде одной строки. Такое объединение происходит в
соответствии с последовательностью событий во время компиляции,
определенной этапами преобразования.
"This is the first half of the string, this is the second half"
См. также
Строковые литералы в C
Максимальная длина строки
Статья • 03.03.2023 • Чтение занимает 2 мин
Хотя отдельные строки в кавычках не могут быть длиннее 2048 байтов, объединив
строки, можно создать строковый литерал, состоящий приблизительно из 65535
байтов.
См. также
Строковые литералы в C
Знаки препинания и специальные
символы
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
punctuator : один из ( ) [ ] { } * , : = ; ... #
См. также
Элементы языка C
Структура программы
Статья • 03.03.2023 • Чтение занимает 2 мин
Пространства имен
См. также
Справочник по языку C
Файлы с исходным кодом и исходные
программы
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
translation-unit :
external-declaration
translation-unit external-declaration
external-declaration :
function-definition
declaration
7 Примечание
См. также
Структура программы
Директивы препроцессору
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Файлы с исходным кодом и исходные программы
Прагмы C
Статья • 03.03.2023 • Чтение занимает 2 мин
alloc_text
auto_inline
bss_seg
check_stack
code_seg
comment
component
const_seg
data_seg
deprecated
detect_mismatch
fenv_access
float_control
fp_contract
function
hdrstop
include_alias
inline_depth
inline_recursion
intrinsic
make_public
managed
message
omp
once
optimize
pack
pop_macro
push_macro
region, endregion
runtime_checks
section
setlocale
strict_gs_check
system_header
unmanaged
warning
См. также
Файлы с исходным кодом и исходные программы
Объявления и определения в C
Статья • 03.03.2023 • Чтение занимает 2 мин
int main() {}
int var = 0;
double val[MAXVAL];
См. также
Файлы с исходным кодом и исходные программы
Объявления и определения функций
Статья • 03.03.2023 • Чтение занимает 2 мин
Примечания
Объявления функции и переменных могут находиться внутри или вне определения
функции. Считается, что любое объявление, сделанное внутри определения
функции, находится на "внутреннем", или "локальном", уровне, а объявление,
расположенное вне всех определений функций, находится на внешнем,
глобальном уровне или на уровне области видимости файла. Определения
переменных, подобно объявлениям, могут находиться на внутреннем (в
определении функции) или внешнем (вне всех определений функций) уровне.
Определения функций всегда находятся на внешнем уровне. Подробнее
определения функций рассматриваются в статье Определения функций. Прототипы
функций описаны в статье Прототипы функций.
См. также
Файлы с исходным кодом и исходные программы
Blocks
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Файлы с исходным кодом и исходные программы
Пример программы
Статья • 03.03.2023 • Чтение занимает 2 мин
/*****************************************************************
*****************************************************************/
#define ONE 1
#define TWO 2
#define THREE 3
#include <stdio.h>
// local variables
// of external variable
// defined elsewhere
int z = 0;
w = max( z, w );
return 0;
/****************************************************************
****************************************************************/
if( a > b )
return( a );
else
return( b );
Файл FILE1.C содержит прототип для функции max . Объявления этого типа иногда
называются "опережающими", поскольку функция объявляется до ее
использования. Определение функции main содержит вызовы функции max .
См. также
Файлы с исходным кодом и исходные программы
Функция main и выполнение
программ
Статья • 03.03.2023 • Чтение занимает 2 мин
Примечания
Функции в исходном коде программы выполняют одну или несколько конкретных
задач. Функция main может вызывать эти функции для выполнения
соответствующих задач. При main вызове другой функции она передает
управление выполнением функции, чтобы выполнение началось с первой
инструкции в функции. Функция возвращает управление, когда main return
выполняется инструкция или когда достигается конец функции.
параметр передается main в , этот параметр называется envp . Типы для argc , argv и
envp определяются языком C. Вы также можете объявить argv как char** argv и
main Прекращения
Программа обычно перестает выполняться, когда она возвращается или достигает
конца main , хотя она может завершиться в других точках программы по различным
причинам. Например, может потребоваться принудительное завершение
программы при обнаружении какого-то условия ошибки. Для этого можно
использовать функцию exit . Дополнительные сведения и exit пример
использования см. в разделе exit.
Среда envp
Если программа использует main функцию, среда многобайтовых символов
создается библиотекой времени выполнения при запуске программы. Копия среды
для Юникода создается только при необходимости (например, для вызова функции
_wgetenv или _wputenv ). При первом вызове _wputenv или _wgetenv , если среда
многобайтовой кодировки (MBCS) уже существует, создается соответствующая
среда широкосимвольной строки, на которую затем указывает глобальная
переменная _wenviron , представляющая собой широкосимвольную версию
глобальной переменной _environ . В этот момент две копии среды (для
многобайтовой кодировки и Юникода) существуют одновременно и
поддерживаются операционной системой в течение всего срока жизни
программы.
См. также
Функция main и выполнение программ
Описание аргумента
Статья • 03.03.2023 • Чтение занимает 2 мин
Параметр argc в и main wmain функциях — это целое число, указывающее, сколько
аргументов передаются программе из командной строки. Поскольку имя
программы считается аргументом, значение argc по крайней мере равно единице.
Примечания
Параметр argv является массивом указателей на строки, завершающиеся
значением NULL, который представляет аргументы программы. Каждый элемент
массива указывает на строковое представление аргумента, переданного main (или
wmain ). (Сведения о массивах см. в объявлениях массивов.) Параметр argv можно
объявить как массив указателей на тип char ( char *argv[] ) или как указатель на
указатели на тип char ( char **argv ). Для wmain параметра argv можно объявить как
массив указателей на тип wchar_t ( wchar_t *argv[] ) или в качестве указателя на тип
wchar_t ( wchar_t **argv ).
См. также
Функция main и выполнение программ
Расширение аргументов-
заполнителей
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Параметры ссылок
Если двойная кавычка стоит после четного числа символов обратной косой
черты, в массив argv помещается по одному символу обратной косой черты (
\ ) для каждой пары символов обратной косой черты ( \\ ), а сама двойная
"a b c" d e a b c d e
a\\\"b c d a\"b c d
a"b"" c d ab" c d
Пример
Код
C
//
#include <stdio.h>
int count;
return;
Command-line arguments:
argv[0] C:\MSC\ARGS.EXE
Environment variables:
COMSPEC=C:\NT\SYSTEM32\CMD.EXE
PATH=c:\nt;c:\binb;c:\binr;c:\nt\system32;c:\word;c:\help;c:\msc;c:\;
PROMPT=[$p]
TEMP=c:\tmp
TMP=c:\tmp
EDITORS=c:\binr
WINDIR=c:\nt
См. также
Функция main и выполнение программ
Настройка обработки командной
строки C
Статья • 03.03.2023 • Чтение занимает 2 мин
Параметры ссылок
Время жизни, область, видимость и
компоновка
Статья • 03.03.2023 • Чтение занимает 2 мин
Время существования
Компоновка
См. также
Структура программы
Время существования
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Время жизни, область, видимость и компоновка
Область и видимость
Статья • 03.03.2023 • Чтение занимает 2 мин
Область функции
См. также
Время жизни, область, видимость и компоновка
Сводка времени существования и
видимости
Статья • 03.03.2023 • Чтение занимает 2 мин
Атрибуты:
Элемент Спецификатор
Результат: ;
Видимость
Пример
Описание
В следующем примере показаны блоки, вложение и видимость переменных:
Код
C
// Lifetime_and_Visibility.c
#include <stdio.h>
// restored)
// definition restored)
return 0;
Комментарии
В этом примере имеется 4 уровня видимости: внешний уровень и 3 уровня блоков.
Значения выводятся на экран, как указано в комментариях после каждого
оператора.
См. также
Время жизни, область, видимость и компоновка
Компоновка
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Использование ключевого слова extern для задания компоновки
Внутренняя компоновка
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Использование ключевого слова extern для задания компоновки
Внешняя компоновка
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Использование ключевого слова extern для задания компоновки
Без компоновки
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Использование ключевого слова extern для задания компоновки
Пространства имен
Статья • 03.03.2023 • Чтение занимает 2 мин
7 Примечание
Метки операторов
Обычные идентификаторы
Имена Typedef
struct student {
char student[20];
int class;
int id;
} student;
См. также
Структура программы
Выравнивание (C11)
Статья • 03.03.2023 • Чтение занимает 3 мин
Синтаксис alignas
C
alignas(type)
alignas(constant-expression)
_Alignas(type)
_Alignas(constant-expression)
Remarks
_Alignas нельзя использовать в объявлении typedef, битового поля, функции,
параметра функции или объекта, объявленного с описателем register .
Пример alignas
В этом примере используется удобный макрос alignof , так как его можно
перенести в C++. Если вы используете _Alignof , поведение будет аналогичным.
#include <stdio.h>
#include <stdalign.h>
typedef struct
int main()
/* output
sizeof(cacheFriendly): 64
alignof(cacheFriendly): 32
*/
Синтаксис alignof
C++
alignof(type)
_Alignof(type)
Пример alignof
В этом примере используется удобный макрос alignof , так как его можно
перенести в C++. Если вы используете _Alignof , поведение будет аналогичным.
#include <stdalign.h>
#include <stdio.h>
int main()
typedef struct
int a;
double b;
} test;
/* output
alignof(short) = 2
alignof(int) = 4
alignof(long) = 4
alignof(float) = 4
alignof(double) = 8
alignof(test) = 8
*/
Требования
Выполните сборку с помощью команды /std:c11.
Классы хранения в C
Описатели типов С
Квалификаторы типов
Инициализация
Неполные типы
Объявления Typedef
См. также
Справочник по языку C
Общие сведения об объявлениях
Статья • 03.03.2023 • Чтение занимает 3 мин
Синтаксис
declaration :
declaration-specifiers :
init-declarator-list :
init-declarator
init-declarator-list , init-declarator
init-declarator :
declarator
declarator = initializer
7 Примечание
В объявлениях переменных должен быть указан класс хранения или тип (или и то, и
другое). За исключением ключевого слова __declspec в объявлениях допускается
только один спецификатор класса хранения. Некоторые спецификаторы класса
хранения не допускаются в некоторых контекстах. Класс хранения __declspec
может использоваться с другими описателями класса хранения; его можно
указывать более одного раза. Спецификатор класса хранения для объявления
влияет только на то, каким образом объявленный элемент хранится и
инициализируется, и какие части программы могут ссылаться на элемент.
См. также
Краткие сведения о синтаксисе языка C
Объявления и типы
Синтаксис
storage-class-specifier :
auto
register
static
extern
typedef
См. также
Объявления и типы
Спецификаторы классов хранения
для объявлений внешнего уровня
Статья • 03.03.2023 • Чтение занимает 3 мин
static int k;
Пример
В примере ниже показаны внешние объявления.
/******************************************************************
*******************************************************************/
#include <stdio.h>
int main()
i++;
next();
int i = 3; // Definition of i
i++;
other();
/******************************************************************
*******************************************************************/
#include <stdio.h>
i++;
Два исходных файла в этом примере содержат три внешних объявления i . Только
одно объявление является определяющим. Это объявление
int i = 3;
extern int x;
int x = 0;
Все три функции ( main , next и other ) выполняют одну и ту же задачу: они
расширяют переменную i и отображают ее значение. Отображаются значения 4,
5 и 6.
См. также
Классы хранения в C
Спецификаторы классов хранения
для объявлений внутреннего уровня
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Классы хранения в C
Описатель класса хранения auto
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Ключевое слово auto
register описатель класса хранения
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Описатели класса хранения для объявлений внутреннего уровня
Спецификатор класса хранения static
Статья • 03.03.2023 • Чтение занимает 2 мин
Комментарии
Если переменная с типом static не инициализирована явно, она
инициализируется со значением 0 по умолчанию. Внутри функции static выделяет
хранилище и служит определением. Внутренние статические переменные
представляют закрытое постоянное хранилище, видимое только одной функции.
См. также
Классы хранения в C
Пример
Этот пример иллюстрирует объявления на внутреннем и внешнем уровнях.
// Source1.c
int i = 1;
// Source2. c
#include <stdio.h>
extern int i;
void func(void);
int main()
// Prints 1:
printf_s("%d\n", i);
func();
return;
void func(void)
int i = 16;
// Prints 16, 1:
printf_s("%d\n%d\n", i, *external_i);
См. также
Спецификаторы классов хранения для объявлений внутреннего уровня
Спецификаторы классов хранения с
объявлениями функций
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Классы хранения в C
Спецификаторы типов C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
type-specifier : void char short int long float double signed unsigned struct-or-
Типы signed char , signed int , signed short int и signed long int вместе с
аналогичными типами unsigned и enum совокупно именуются целочисленными
типами. Описатели типов float , double и long double называются типами с
плавающей точкой или плавающей запятой. Любой спецификатор
целочисленного типа или типа с плавающей запятой можно использовать в
объявлении переменной или функции. Первоначально, если type-specifier объект
не был указан в объявлении, он считался int . Компилятор Майкрософт больше не
принимает объявления по умолчанию int .
Ключевое слово void используется для трех целей: задание типа возвращаемого
значения функции, задание списка типов аргументов для функции, не
принимающей аргументов, и задание указателя на неуказанный тип. Тип void
можно использовать для объявления функций, не возвращающих никаких
значений, или для объявления указателя на неуказанный тип. В статье Аргументы
описано, как расценивается void , если это единственное ключевое слово в скобках
после имени функции.
int myfunc();
short myfunc();
int *pi;
short *ps;
1
signed char char
unsigned char —
float —
2
long double —
1
Если вы указали, что тип char по умолчанию является беззнаковым (указав
параметр компилятора /J ), вы не сможете сократить signed char до char .
См. также
Спецификаторы типов C
Квалификаторы типов
Статья • 03.03.2023 • Чтение занимает 3 мин
Синтаксис
type-qualifier :
const
restrict
volatile
const и volatile
Ниже представлены допустимые объявления const и volatile .
C
*first += *val;
*second += *val;
int main()
int i = 1, j = 2, k = 3;
return 0;
union z
int* restrict x;
double* restrict y;
};
См. также:
/std (определение стандартной версии языка)
Объявления и типы
Деклараторы и объявления
переменных
Статья • 03.03.2023 • Чтение занимает 2 мин
Тип Описание
переменной
Синтаксис
declarator :
direct-declarator :
identifier
( declarator )
direct-declarator ( parameter-type-list )
pointer :
* type-qualifier-list необ.
type-qualifier-list :
type-qualifier
type-qualifier-list type-qualifier
7 Примечание
См. также
Объявления и типы
Простые объявления переменных
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
declarator :
direct-declarator :
identifier
identifier :
nondigit
identifier nondigit
identifier digit
В этом примере обе переменные reply и flag имеют тип unsigned long и
содержат целочисленные значения без знака.
См. также
Деклараторы и объявления переменных
Объявления перечислений C
Статья • 03.03.2023 • Чтение занимает 3 мин
Синтаксис
enum-specifier :
enum identifier
enumerator-list :
enumerator
enumerator-list , enumerator
enumerator :
enumeration-constant
enumeration-constant = constant-expression
enumeration-constant :
identifier
Необязательный параметр identifier задает имя типа перечисления, который
определен с помощью enumerator-list . Этот идентификатор часто называется
тегом перечисления, определенным списком. Описатель типа объявляет, что
identifier является тегом для перечисления, определенного нетерминальным
параметром enumerator-list , как показано ниже.
enum identifier
// enumerator-list
Примеры
В следующих примерах показаны объявления перечисления.
tuesday,
thursday,
friday
} workday;
C
workday = ( enum DAY ) ( day_value - 1 );
true
};
или как
if ( match_flag == false )
. /* statement */
end_flag = true;
См. также
Перечисления
Объявления структур
Статья • 03.03.2023 • Чтение занимает 4 мин
Синтаксис
struct-or-union-specifier :
struct-or-union identifier
struct-or-union :
struct
union
struct-declaration-list :
struct-declaration
struct-declaration-list struct-declaration
struct-declaration :
specifier-qualifier-list struct-declarator-list ;
specifier-qualifier-list :
struct-declarator-list :
struct-declarator :
declarator
Объявление типа структуры не выделяет место для структуры. Это только шаблон
для последующих объявлений переменных структуры.
Ранее определенный identifier (тег) можно использовать для ссылки на тип
структуры, определенный в другом месте. В этом случае нельзя повторять, struct-
declaration-list если определение является видимым. Объявления указателей на
структуры и объекты typedef для типов структуры могут использовать тег структуры
до определения типа структуры. Однако определение структуры необходимо
получить до выполнения каких-либо фактических действий с размером полей. Это
использование является неполным определением типа и тега типа. Для того чтобы
это определение стало полным, определение типа должно отображаться позже в
той же области.
Доступ к вложенным структурам можно осуществлять так же, как если бы они были
объявлены на уровне области файлов. Например, с данным объявлением
struct a
int x;
struct b
int y;
} var2;
} var1;
struct a var3;
struct b var4;
Примеры
В следующих примерах показаны объявления структуры.
char name[20];
int id;
long class;
} temp;
Структура employee содержит три члена: name , id и class . Член name — это 20-
элементный массив, а id и class — простые элементы с типом int и long
соответственно. Идентификатор employee является идентификатором структуры.
float x, y;
} complex;
char c;
float *pf;
} x;
Анонимные структуры могут быть полезны, если имя тега не требуется, например,
если одно объявление определяет все экземпляры структуры. Пример:
struct
int x;
int y;
} mystruct;
struct somestruct
int x, y;
} point;
int type;
} w;
Объявления структуры также можно указать без декларатора, если они являются
членами другой структуры или объединения. Уровень имен полей повышается до
уровня внешней структуры. Например, безыменная структура выглядит следующим
образом:
struct s
float y;
struct
int a, b, c;
};
char str[10];
} *p_s;
См. также
Деклараторы и объявления переменных
Битовые поля в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
struct-declarator :
declarator
Битовые поля должны иметь достаточную длину, чтобы вмещать в себя битовый
шаблон. Например, эти два оператора не являются законными:
C
struct
} screen[25][80];
struct mybitfields
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
} test;
test.a = 2;
test.b = 31;
test.c = 0;
return 0;
cccccccb bbbbaaaa
struct
} tricky_bits;
См. также
Объявления структур
Хранение и выравнивание структур
Статья • 03.03.2023 • Чтение занимает 2 мин
offset % alignment-requirement == 0
где n — это размер пакета, выраженный с параметром /Zp[n], а item — это элемент
структуры. Размер пакета по умолчанию — /Zp8.
См. также
Объявления структур
union Объявления
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
struct-or-union-specifier :
struct-or-union identifier
struct-or-union :
struct
union
struct-declaration-list :
struct-declaration
struct-declaration-list struct-declaration
struct-declaration :
specifier-qualifier-list struct-declarator-list ;
specifier-qualifier-list :
struct-declarator-list :
struct-declarator
struct-declarator-list , struct-declarator
Члены объединений не могут иметь неполный тип, тип void или тип функции.
Поэтому члены не могут быть экземпляром объединения, но могут быть
указателями на объявляемый тип объединения.
7 Примечание
Примеры
Ниже представлены примеры объединений.
int svar;
unsigned uvar;
} number;
struct
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
struct str
int a, b;
char c[4];
long l;
float f;
};
char c_array[10];
} my_str;
struct x
int type_tag;
union
int x;
float y;
См. также
Деклараторы и объявления переменных
Хранение объединений
Статья • 03.03.2023 • Чтение занимает 2 мин
char *a, b;
float f[20];
} x;
См. также
Объявления объединений
Объявления массивов
Статья • 03.03.2023 • Чтение занимает 2 мин
"Объявление массива" именует массив и задает тип его элементов. Он также может
определять число элементов в массиве. Переменная с типом массива считается
указателем на тип элементов массива.
Синтаксис
declaration :
init-declarator-list :
init-declarator
init-declarator-list , init-declarator
init-declarator :
declarator
declarator = initializer
declarator :
char A[2][3];
Три столбца первой строки сохраняются первыми, за ними следуют три столбца
второй строки. Это означает, что последний индекс изменяется наиболее быстро.
Примеры
В следующих примерах показаны объявления массивов.
float matrix[10][15];
struct {
float x, y;
} complex[100];
Этот пример является объявлением массива структур. Этот массив содержит 100
элементов, каждый элемент — это структура, содержащая два члена.
См. также
Деклараторы и объявления переменных
Хранение массивов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Объявления массивов
Объявления указателей
Статья • 03.03.2023 • Чтение занимает 3 мин
Синтаксис
declarator :
direct-declarator :
identifier
( declarator )
direct-declarator ( parameter-type-list )
pointer :
* type-qualifier-list необ.
type-qualifier-list :
type-qualifier
type-qualifier-list type-qualifier
задает type-specifier тип объекта , который может быть любым базовым типом,
типом структуры или объединения. Переменные указателя также могут указывать
на функции, массивы и другие указателям. (Дополнительные сведения об
объявлении и интерпретации более сложных типов указателей см. в разделе
Интерпретация более сложных деклараторов.)
Может type-qualifier быть либо const , либо volatile , либо и то, и другое. Эти
ключевые слова указывают, соответственно, что указатель не может быть изменен
самой программой ( const ), или что указатель может быть изменен каким-либо
процессом, не зависящим от программы ( volatile ). Дополнительные сведения о
ключевых словах const и volatile см. в статье Квалификаторы типов.
указателем на массив.
Примеры
В следующих примерах показаны объявления указателей.
to a constant value */
struct list
char *token;
int count;
} line;
Переменная line имеет тип структуры с именем list . Тип list структуры состоит
из трех элементов: первый элемент является указателем на char значение, второй
— int значением, а третий — указателем на другую list структуру.
struct id
} record;
См. также
Деклараторы и объявления переменных
Хранение адресов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Объявления указателей
Основанные указатели (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
type__based(base)declarator
void *vpBuffer;
struct llist_t
};
См. также
Деклараторы и объявления переменных
Абстрактные деклараторы в C
Статья • 03.03.2023 • Чтение занимает 2 мин
// returning an int
// functions each with one parameter that has type unsigned int
7 Примечание
См. также
Деклараторы и объявления переменных
Интерпретация сложных
деклараторов
Статья • 03.03.2023 • Чтение занимает 4 мин
^ ^ ^ ^ ^ ^ ^
7 6 4 2 1 3 5
2. указатель на
3. функцию, возвращающую
4. указатель на
6. указателями на
Примеры
В следующих примерах приведены другие сложные объявления и показано, как
круглые скобки могут влиять на значение объявления.
{ /* returning structures */
int a;
char b;
/* ILLEGAL */
{ /* to pointers to unions */
int x;
unsigned y;
} **var[5][5];
of pointers to unions */
См. также
Объявления и типы
Инициализация
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Объявления и типы
Инициализация скалярных типов
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
declaration :
declaration-specifiers :
init-declarator-list :
init-declarator
init-declarator-list , init-declarator
init-declarator :
declarator
initializer :
assignment-expression
Примеры
Инициализация иллюстрируется следующими примерами.
int x = 10;
int *b = &x;
int GLOBAL ;
int LOCAL ;
См. также
Инициализация
Инициализация агрегатных типов
Статья • 03.03.2023 • Чтение занимает 4 мин
Агрегатный тип — это тип структуры, объединения или массива. Если агрегатный
тип содержит члены агрегатных типов, правила инициализации применяются
рекурсивно.
Синтаксис
initializer :
{ initializer-list , }
initializer-list :
initializer
initializer-list , initializer
int x[ ] = { 0, 1, 2 }
Примеры
В следующем примере представлены инициализаторы массива.
int P[4][3] =
{
{ 1, 1, 1 },
{ 2, 2, 2 },
{ 3, 3, 3,},
{ 4, 4, 4,},
};
int P[4][3] =
{
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4
};
typedef struct
} triplet;
triplet nlist[2][3] =
{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }, /* Row 1 */
};
В этом примере параметр nlist объявлен как массив структур, состоящий из двух
строк и трех столбцов, где каждая структура имеет три члена. Строка 1
инициализации присваивает значения первой строке nlist следующим образом.
инициализацию nlist[0][1] .
};
struct list
int i, j, k;
float m[2][3];
} x = {
1,
2,
3,
};
union
char x[2][3];
int i, j, k;
} y = { {
{'1'},
{'4'}
};
См. также
Инициализация
Инициализация строк
Статья • 03.03.2023 • Чтение занимает 2 мин
Объявление
идентично объявлению
См. также
Инициализация
Хранилище базовых типов
Статья • 03.03.2023 • Чтение занимает 2 мин
float 4 байта
double 8 байт
плавающей запятой.
См. также
Объявления и типы
Тип char
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Хранение базовых типов
Тип int
Статья • 03.03.2023 • Чтение занимает 2 мин
Размер знакового или беззнакового элемента signed int или unsigned int
соответствует стандартному размеру целочисленного значения на конкретном
компьютере. Например, в 16-разрядных операционных системах тип int обычно
имеет размер 16 бит, или 2 байта. В 32-разрядных операционных системах тип int
обычно имеет размер 32 бита, или 4 байта. Таким образом в зависимости от
целевой среды тип int эквивалентен типу short int или long int , а тип unsigned
int — типу unsigned short или unsigned long . Все типы int представляют
7 Примечание
См. также
Хранение базовых типов
Целочисленные типы размеров C
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Хранение базовых типов
Тип float
Статья • 03.03.2023 • Чтение занимает 3 мин
float 6–7 4
double 15–16 8
Мантисса хранится в виде бинарной доли, которая больше или равна 1 и меньше 2.
Для типов float и double в мантиссе подразумевается наличие начального 1 в
наиболее значимой битовой позиции, поэтому фактически длина мантисс
составляет 24 и 53 бит соответственно, даже если наиболее значимый бит никогда
не хранится в памяти.
float f_short;
double f_long;
См. также
Хранение базовых типов
Тип double
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Хранение базовых типов
Тип long double
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Хранение базовых типов
Неполные типы
Статья • 03.03.2023 • Чтение занимает 2 мин
Тип void является неполным типом, который невозможно сделать полным. Чтобы
дополнить неполный тип, укажите отсутствующие данные. В следующих примерах
показано, как создать и дополнить неполные типы.
struct student
int num;
Чтобы создать неполный тип массива, объявите тип массива, не указывая для
него число повторений. Пример:
См. также
Объявления и типы
Объявления Typedef
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
declaration :
declaration-specifiers :
storage-class-specifier :
typedef
type-specifier :
void
char
short
int
long
float
double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name
typedef-name :
identifier
int main()
int FlagType;
const FlagType x;
Недостаточно сказать
Имена typedef можно использовать, чтобы сделать код более понятным. Все три
следующих объявления signal задают один и тот же тип, причем в первом
объявлении имена typedef не используются.
Примеры
В следующих примерах показаны объявления typedef:
C
typedef struct club
char name[30];
} GROUP;
Этот оператор объявляет имя GROUP как тип структуры с тремя членами. Поскольку
также указан тег структуры, club , в объявлениях можно использовать как имя
typedef ( GROUP ), так и тег структуры. Необходимо использовать ключевое struct
слово с тегом , а ключевое struct слово нельзя использовать с именем typedef.
to declare a pointer */
Тип PG объявлен как указатель на тип GROUP , который, в свою очередь, определен
как тип структуры.
DRAWF box;
эквивалентно объявлению
См. также
Объявления и типы
Расширенные атрибуты классов
хранения в C
Статья • 26.09.2022 • Чтение занимает 2 мин
Синтаксис
storage-class-specifier :
extended-decl-modifier необ.
extended-decl-modifier-seq extended-decl-modifier
thread
naked
dllimport
dllexport
См. также
Объявления и типы
Импорт и экспорт DLL
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Расширенные атрибуты классов хранения в C
Naked (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Расширенные атрибуты классов хранения в C
локальное хранилище потока
Статья • 03.03.2023 • Чтение занимает 2 мин
void func1()
return tls_i;
int j = j; /* Error */
См. также
Расширенные атрибуты классов хранения в C
Выражения и присваивания
Статья • 03.03.2023 • Чтение занимает 2 мин
Константные выражения
Побочные эффекты
Точки последовательности
Инструкции
Приоритет операторов
Преобразования типов
Приведение типов
См. также
Справочник по языку C
Операнды и выражения
Статья • 03.03.2023 • Чтение занимает 2 мин
Вычисление значения
См. также
Выражения и присваивания
Первичные выражения в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
primary-expression :
identifier
constant
string-literal
( expression )
generic-selection
expression :
assignment-expression
expression , assignment-expression
См. также
Выделенный фрагмент _GenericОперанды и выражения
Идентификаторы в первичных
выражениях
Статья • 03.03.2023 • Чтение занимает 2 мин
Идентификаторы могут иметь целочисленный тип, float , enum , struct , union , тип
массива, тип указателя или тип функции. Идентификатор представляет собой
основное выражение, его он был объявлен как обозначение объекта (тогда это l-
значение) или как функция (тогда это обозначение функции). Определение
левостороннего значения приводится в статье Выражения L-Value и R-Value.
См. также
Первичные выражения в C
Константы в первичных выражениях
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Первичные выражения в C
Строковые литералы в первичных
выражениях
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Первичные выражения в C
Выражения в скобках
Статья • 03.03.2023 • Чтение занимает 2 мин
Любой операнд можно заключить в круглые скобки без изменения типа или
значения заключенного в скобки выражения. Например, в выражении
( 10 + 5 ) / 5
11.
( i++ +1 ) * ( 2 + i )
( 0 + 1 + 1 ) * ( 2 + 1 )
( 0 + 1 + 1 ) * ( 2 + 0 )
См. также
Первичные выражения в C
Выбор с использованием _Generic
(C11)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
generic-selection :
assoc-list :
association
assoc-list , association
association :
type-name : assignment-expression
default : assignment-expression
Ограничения
assoc-list не может указывать один и тот же тип более одного раза.
Пример
Как один из вариантов, _Generic можно использовать в макросе. Файл заголовка
<tgmath.h> использует _Generic для вызова правильной математической функции
в зависимости от типа аргумента. Например, макрос для cos сопоставляет вызов,
содержащий число с плавающей точкой, с cosf , одновременно сопоставляя вызов,
содержащий сложное число двойной точности, с ccos .
#include <stdio.h>
int: "int", \
char: "char", \
double: "double", \
default: "unknown")
int main()
/* Output:
*/
Требования
Выполните сборку с помощью команды /std:c11.
См. также
/std (определение стандартной версии языка)
char *p ;
short i;
long l;
См. также
Операнды и выражения
Постоянные выражения в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
constant-expression :
conditional-expression
conditional-expression :
logical-OR-expression
expression :
assignment-expression
expression , assignment-expression
assignment-expression :
conditional-expression
См. также
Операнды и выражения
Вычисление выражений (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Операнды и выражения
Побочные эффекты
Статья • 03.03.2023 • Чтение занимает 2 мин
add( i + 1, i = j + 2 );
x[i] = i++;
См. также
Вычисление выражений
Точки следования C
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Вычисление выражений
Операторы в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Символ name
Символ name
* / % Мультипликативные операторы
+ - Аддитивные операторы
См. также
Выражения и присваивания
Приоритет и порядок оценки
Статья • 03.03.2023 • Чтение занимает 4 мин
[ ] ( ) . ->
Выражение Слева направо
++ -- (постфикс)
sizeof & * + - ~ !
Унарный Справа налево
++ -- (префикс)
= *= /= %=
Простое и составное присваивание 2 Справа налево
+= -= <<= >>= &=
^= |=
1
Операторы перечислены в порядке убывания приоритета. Если в одной строке
или группе находится несколько операторов, они имеют равный приоритет.
2
Все операторы простого и составного присваивания имеют равный приоритет.
x && y++
второй операнд, y++ , вычисляется, только если x имеет значение true (не равно
нулю). Таким образом, если y дает значение false (0), то x не увеличивается.
Примеры
Ниже приводится несколько примеров автоматической привязки выражений
компилятором:
a & b || c (a & b) || c
a = b || c a = (b || c)
p == 0 ? p += 1: p += 2 ( p == 0 ? p += 1 : p ) += 2
( p == 0 ) ? ( p += 1 ) : ( p += 2 )
См. также
Операторы в C
Обычные арифметические
преобразования
Статья • 03.03.2023 • Чтение занимает 2 мин
float fVal;
double dVal;
int iVal;
* Uses step 4.
*/
* Uses step 3.
*/
См. также
Операторы в C
Постфиксные операторы
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
postfix-expression :
primary-expression
postfix-expression [ expression ]
postfix-expression . identifier
postfix-expression ++
postfix-expression --
См. также
Операторы в C
Одномерные массивы
Статья • 03.03.2023 • Чтение занимает 2 мин
postfix-expression [ expression ]
// one_dimensional_arrays.c
int main() {
ptr = a;
sum = 4[ptr];
C
a[b]
*(a + b)
*(b + a)
b[a]
процедура:
См. также
Оператор индекса:
Многомерные массивы (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Индексное выражение также может иметь несколько индексов, как показано ниже:
Примеры
В следующих примерах массив с именем prop объявляется с тремя элементами,
каждый из которых представляет собой массив 4x6, содержащий значения типа
int .
int prop[3][4][6];
i = prop[0][0][1];
i = prop[2][1][3];
элементного массива.
ip = prop[2][1];
ipp = prop[2];
Вызов функции — это выражение, которое содержит имя вызываемой функции или
значение указателя на функцию и, при необходимости, аргументы, передаваемые в
эту функцию.
Синтаксис
postfix-expression :
argument-expression-list :
assignment-expression
argument-expression-list , assignment-expression
postfix-expression . identifier
expression->identifier
эквивалентно
(*expression).identifier
struct pair
int a;
int b;
} item, list[10];
item.sp = &item;
(item.sp)->a = 24;
list[8].b = 12;
См. также
Операторы доступа к членам: . и ->
Постфиксные операторы увеличения
и уменьшения в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
postfix-expression :
postfix-expression ++
postfix-expression --
if ( var++ > 0 )
*p++ = *q++;
См. также
Постфиксные операторы увеличения и уменьшения: ++ и --
Унарные операторы C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
unary-expression :
postfix-expression
++ unary-expression
-- unary-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-name )
& * + - ~ !
См. также
Операторы в C
Префиксные операторы увеличения и
уменьшения
Статья • 03.03.2023 • Чтение занимает 2 мин
Пример
В следующем примере показан унарный оператор префиксного декремента.
return;
См. также
Унарные операторы C
Операторы косвенного обращения и
взятия адреса
Статья • 03.03.2023 • Чтение занимает 2 мин
Указатель функций.
Примеры
Далее в примерах используются следующие типичные объявления.
int *pa, x;
int a[20];
Эта инструкция использует оператор взятия адреса ( & ) для получения адреса
шестого элемента массива a . Результат сохраняется в переменной указателя pa :
pa = &a[5];
x = *pa;
assert( x == *&x );
См. также
Оператор косвенного обращения: *
Оператор Описание
Примеры
В следующих примерах показаны унарные арифметические операторы:
short x = 987;
x = -x;
y = ~y;
Если x больше или равно y , результат выражения равен 1 (true). Если x меньше y ,
результат равен 0 (false).
См. также
Выражения с унарными операторами
Оператор sizeof (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
sizeof unary-expression
sizeof ( type-name )
Примечания
Операнд является либо любым идентификатором unary-expression, либо
выражением type-cas (то есть описателем типа, заключенным в скобки). unary-
expression не может представлять объект битового поля, неполный тип или
указатель функции. Результатом является целочисленная константа без знака.
Стандартный заголовок STDDEF.H определяет этот тип как size_t.
};
В этом примере strings — это массив указателей на char . Число указателей — это
число элементов в массиве, но оно не определено. Легко определить количество
указателей с помощью оператора sizeof , вычислив число элементов в массиве.
Значение целого числа const string_no инициализируется до этого числа.
Поскольку это значение const , string_no невозможно изменить.
См. также
Операторы в C
Синтаксис
cast-expression :
unary-expression
( type-name ) cast-expression
См. также
Оператор приведения: ()
Операторы умножения в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
multiplicative-expression : cast-expression multiplicative-expression * cast-
expression % cast-expression
7 Примечание
Оператор Описание
Примеры
Приведенные здесь объявления используются в следующих примерах:
C
int i = 10, j = 3, n;
double x = 2.0, y;
y = x * i;
n = i / j;
n = i % j;
50 % -6 = 2
-50 % 6 = -2
См. также
Операторы умножения и оператор модуля
Аддитивные операторы в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
additive-expression :
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression - multiplicative-expression
7 Примечание
Если целое число добавить к указателю, целое значение целого числа (i) будет
преобразовано с помощью его умножения на размер значения, к которому
обращается указатель. После преобразования значение целого числа представляет
позиции памяти i, где каждая позиция имеет длину, заданную типом указателя.
Если преобразованное значение целого числа добавить ко значению указателя,
будет получено новое значение указателя, представляющее позиции i адреса из
исходного адреса. Новое значение указателя обращается ко значению того же
типа, что и исходное значение указателя. Следовательно, эта операция аналогична
индексации массива (см. статьи Одномерные массивы и Многомерные массивы
(C)). Если указатель суммы указывает за пределы массива, за исключением первого
расположения, находящегося за верхним пределом, результат не определен.
Дополнительные сведения см. в статье Расчеты с указателями.
См. также
Аддитивные операторы в C
Вычитание (-)
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Аддитивные операторы в C
Использование операторов сложения
Статья • 03.03.2023 • Чтение занимает 2 мин
int i = 4, j;
float x[10];
float *px;
px = &x[4 + i];
px = &x[4] + i;
j = &x[i] - &x[i-2];
См. также
Аддитивные операторы в C
Расчеты с указателями
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Аддитивные операторы в C
Операторы побитового сдвига
Статья • 03.03.2023 • Чтение занимает 2 мин
Операторы сдвига сдвигают свой первый операнд влево ( << ) или вправо ( >> ) на
число позиций, задаваемое вторым операндом.
Синтаксис
shift-expression :
additive-expression
копиями бита знака. Для операторов сдвига влево без переполнения оператор
эквивалентна делению на 2expr2, если операнд expr1 не имеет знака или имеет
неотрицательное значение.
unsigned int x, y, z;
x = 0x00AA;
y = 0x5500;
z = ( x << 8 ) + ( y >> 8 );
При сдвиге вправо бит знака сохраняется. При сдвиге вправо целого числа со
знаком старший значащий бит остается установленным. При сдвиге вправо целого
числа без знака старший значащий бит очищается.
См. также
Операторы сдвигов влево и вправо (>> и <<)
Операторы отношения и равенства C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
relational-expression :
shift-expression
equality-expression :
relational-expression
equality-expression == relational-expression
equality-expression != relational-expression
Примеры
В этих примерах показаны реляционные операторы и операторы равенства.
int x = 0, y = 0;
if ( x < y )
char array[10];
char *p;
*p = '\0';
Фрагмент в этом примере задает для каждого элемента массива array постоянное
символьное значение null.
if ( col == red )
См. также
Реляционные операторы: <, >, <=и >=
Операторы равенства: == и !=
Побитовые операторы в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
AND-expression :
equality-expression
exclusive-OR-expression :
AND-expression
exclusive-OR-expression ^ AND-expression
inclusive-OR-expression :
exclusive-OR-expression
inclusive-OR-expression | exclusive-OR-expression
Оператор Описание
short i = 0xAB00;
short j = 0xABCD;
short n;
n = i & j;
n = i | j;
n = i ^ j;
Expression
11111111 11110000
_________________
00000000 01100000
Синтаксис
logical-AND-expression :
inclusive-OR-expression
logical-OR-expression :
logical-AND-expression
logical-OR-expression || logical-AND-expression
Комментарии
Логические операторы не выполняют обычных арифметических преобразований.
Вместо этого они оценивают каждый операнд с точки зрения его эквивалентности
нулю. Результатом логической операции является либо 0, либо 1. Результат имеет
тип int .
Оператор Описание
Примеры
В следующем примере показано использование логических операторов.
int w, x, y, z;
В этом примере функция printf вызывается для печати сообщения, если x меньше
y , а y меньше z . Если x больше y , то второй операнд ( y < z ) не вычисляется и
сообщение не печатается. Это еще один пример сокращенных вычислений,
который нужно учитывать во время написания логических сравнений. В противном
случае может возникнуть ошибка, если код использует побочные эффекты
вычисления второго операнда.
printf( "%d" , (x == w || x == y || x == z) );
См. также
Логический оператор И: &&
Логический оператор ИЛИ: ||
Оператор Conditional-Expression
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
conditional-expression :
logical-OR-expression
Если оба операнда имеют тип void , результат будет принадлежать типу void .
Если какой-либо из операндов является указателем на объект любого типа, а
второй операнд является указателем на void , указатель на объект
преобразуется в указатель на void , и результатом является указатель на void .
Примеры
В следующих примерах показаны варианты использования условного оператора.
j = ( i < 0 ) ? ( -i ) : ( i );
int x;
int y;
( x == y ) ? ( f1() ) : ( f2() );
См. также
Условный оператор: ? :
Операторы назначения в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
assignment-expression :
conditional-expression
= Простое присваивание
*= Присваивание умножения
/= Присваивание деления
%= Присваивание остатка
+= Присваивание сложения
-= Присваивание вычитания
См. также
Операторы присваивания
Простое назначение (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
double x;
int y;
x = y;
См. также
Операторы присваивания C
Составное назначение C
Статья • 03.03.2023 • Чтение занимает 2 мин
expression1+=expression2
expression1=expression1+expression2
n &= MASK;
См. также
Операторы присваивания C
Оператор последовательного
вычисления
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
expression :
assignment-expression
expression , assignment-expression
Пример
В следующем примере демонстрируется оператор последовательного вычисления.
func_one( x, y + 2, z );
См. также
Оператор "запятая": ,
Преобразования типов (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Символ, короткое целое число или целое битовое поле, со знаком или без, а также
объект типа перечисления можно использовать в выражении везде, где можно
использовать целое число. Если int может представлять все значения исходного
типа, значение преобразуется в int ; в противном случае оно преобразуется в
unsigned int . Этот процесс называется "целочисленным повышением уровня".
Целочисленные повышения сохраняют значение. То есть гарантируется, что
значение после приведения будет таким же, как до него. Дополнительные
сведения есть в статье Обычные арифметические преобразования.
См. также
Выражения и присваивания
Преобразования присваиваний
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Преобразования типов
Преобразования из целочисленных
типов со знаком
Статья • 03.03.2023 • Чтение занимает 3 мин
Если целое число со знаком преобразуется в целое число или тип с плавающей
запятой, значение не изменяется, если оно может быть представлено в
результирующем типе.
int i = -3;
unsigned short u;
u = i;
1
char short Расширение знака
long long unsigned Сохранение битового шаблона; бит высокого порядка перестает
long функционировать как бит знака
long
long long float Представление в виде float . Если long long невозможно
представить точно, некоторая точность теряется.
long long double Представление в виде double . Если long long невозможно
представить точно в виде double , некоторая точность теряется.
long long long Представление в виде double . Если long long невозможно
double представить точно в виде double , некоторая точность теряется.
1
Все записи char основаны на том, что тип char является типом со знаком по
умолчанию.
См. также
Преобразования присваиваний
Преобразования из целочисленных
типов без знака
Статья • 03.03.2023 • Чтение занимает 2 мин
Если целое число без знака преобразуется в целочисленный тип или тип с
плавающей запятой и при этом может быть представлено в результирующем типе,
значение не изменяется.
Когда компилятор преобразует целое число без знака в целое число большего
размера, значение увеличивается с нуля. При преобразовании в целое число
меньшего размера старшие разряды усекаются. Результат интерпретируется как
результирующий тип (см. пример).
unsigned k = 65533;
short j;
j = k;
Когда компилятор преобразует целое число без знака в тип с плавающей запятой,
если исходное значение не может быть представлено точно в результирующем
типе, результатом будет следующее более высокое или меньшее представляемое
значение.
unsigned long long long Сохранение битового шаблона; бит высокого порядка
long становится битом знака
См. также
Преобразования присваиваний
Преобразования типов с плавающей
запятой
Статья • 03.03.2023 • Чтение занимает 4 мин
Когда компилятор преобразует число типа double или long double с плавающей
запятой в значение float , он округляет результат в соответствии с элементами
управления среды с плавающей запятой, значение по умолчанию которых —
"округлить до ближайшего числа с привязкой к четному". Если числовое значение
слишком велико или слишком мало для представления в виде числового значения
float , результат преобразования будет положительной или отрицательной
бесконечностью в соответствии со знаком исходного значения, и возникает
исключение переполнения, если оно включено.
При преобразовании в тип unsigned long или unsigned long long значения,
выходящего за пределы соответствующего диапазона, результатом может
быть некоторое значение, отличающееся от наибольшего или наименьшего
представимого. Будет ли результат значением-меткой, дополненным
значением или ни тем ни другим, зависит от параметров компилятора и
целевой архитектуры. В будущих версиях компилятора может возвращаться
дополненное значение или значение-метка, даже если в предыдущих версиях
оно не возвращалось.
float int Усечение до десятичной запятой. Если результат слишком велик для
представления в качестве значения int , результат не определен.
float long Усечение до десятичной запятой. Если результат слишком велик для
представления в качестве значения long , результат не определен.
float long Усечение до десятичной запятой. Если результат слишком велик для
long представления в качестве значения long long , результат не
определен.
float unsigned Усечение до десятичной запятой. Если результат слишком велик для
представления в качестве значения unsigned , результат не
определен.
float unsigned Усечение до десятичной запятой. Если результат слишком велик для
long представления в качестве значения unsigned long , результат не
определен.
float unsigned Усечение до десятичной запятой. Если результат слишком велик для
long представления в качестве значения unsigned long long , результат
long не определен.
double int Усечение до десятичной запятой. Если результат слишком велик для
представления в качестве значения int , результат не определен.
double long Усечение до десятичной запятой. Если результат слишком велик для
представления в качестве значения long , результат не определен.
double unsigned Усечение до десятичной запятой. Если результат слишком велик для
представления в качестве значения unsigned , результат не
определен.
double unsigned Усечение до десятичной запятой. Если результат слишком велик для
long представления в качестве значения unsigned long , результат не
определен.
double unsigned Усечение до десятичной запятой. Если результат слишком велик для
long представления в качестве значения unsigned long long , результат
long не определен.
Исходный Кому Метод
тип
Преобразования из типа long double производятся так же, как из типа double .
См. также
Преобразования присваиваний
Преобразования в типы указателей и
из типов указателей
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Преобразования назначений
Преобразования из других типов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Преобразования назначений
Преобразования приведений типов
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
cast-expression :
unary-expression
( type-name ) cast-expression
type-name :
Указатель на объект или Любой целочисленный тип, void * указатель на объект или
void * указатель функции
Выражение void * имеет указатель void на тип , а не тип void . Если объект
приведен к типу void , результирующее выражение не может быть назначено ни
одному элементу. Аналогичным образом, объект приведения типа не является
допустимым l-значением, поэтому нельзя присваивать объекту приведения типа.
См. также
Преобразования типов
Преобразования вызова функции
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Преобразования типов
Операторы (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Оператор break
Составной оператор
Оператор continue
Оператор do-while
Оператор-выражение
Оператор for
Оператор if
Оператор NULL
Оператор return
Оператор switch
Оператор try-except
Оператор try-finally
Оператор while
См. также
Справочник по языку C
Общие сведения об операторах в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
statement :
labeled-statement
compound-statement
expression-statement
selection-statement
iteration-statement
jump-statement
См. также
Операторы
Оператор break (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
jump-statement :
break ;
#include <stdio.h>
int main() {
char c;
for(;;) {
scanf_s("%c", &c);
if (c == 'Q')
break;
См. также
Оператор break
Составной оператор (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
compound-statement :
declaration-list :
declaration
declaration-list declaration
statement-list :
statement
statement-list statement
if ( i > 0 )
line[i] = x;
x++;
i--;
См. также
Операторы
Оператор continue (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
jump-statement :
continue ;
x = f( i );
if ( x == 1 )
continue;
y += x * x;
Синтаксис
iteration-statement : do statement while ( expression ) ;
do
y = f( x );
x--;
} while ( x > 0 );
См. также
Оператор do-while (C++)
Оператор выражений (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
expression-statement :
expression необ. ;
x++; /* x is incremented */
y = z = ( f( x ) + 3 ); /* A function-call expression */
См. также
Операторы
Оператор for (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Оператор for позволяет повторить выполнение того или иного оператора или
составного оператора заданное число раз. Тело оператора for выполняется ноль
или более раз, пока необязательное условие не примет значение false. Внутри
оператора for можно использовать необязательные выражения для
инициализации и изменения значений во время выполнения этого оператора
( for ).
Синтаксис
iteration-statement :
for( ; ; )
Пример
В следующем примере показано использование оператора for :
// c_for.c
int main()
int space = 0;
int tab = 0;
int i;
space++;
if ( line[i] == '\t' )
tab++;
return 0;
Вывод
Output
Number of spaces: 4
Number of tabs: 2
См. также
Операторы
goto и операторы с метками (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Оператор goto передает управление метке. Данная метка должна находиться в той
же функции и может присутствовать только перед одним ее оператором.
Синтаксис
statement :
labeled-statement
jump-statement
jump-statement :
goto identifier ;
labeled-statement :
identifier : statement
Метка оператора значима только для оператора goto ; в любом другом контексте
оператор с меткой выполняется независимо от нее.
// goto.c
#include <stdio.h>
int main()
int i, j;
if ( i == 5 )
goto stop;
В этом примере оператор goto передает управление в точку с меткой stop , когда
значение переменной i равно 5.
См. также
Операторы
Оператор if (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
selection-statement :
if ( expression ) statement
if ( i > 0 )
y = x / i;
else
x = i;
y = f( x );
if ( j > i )
x = j;
else
x = i;
if ( i > 0 )
{ /* With braces */
if ( j > i )
x = j;
else
x = i;
См. также
Оператор if-else (C++)
Оператор NULL (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
;
Примечания
Некоторые операторы, например do , for , if и while , требуют, чтобы
исполняемые операторы были представлены в теле оператора. Оператор null
соответствует синтаксическим требованиям в случаях, когда существенная
основная часть оператора не требуется.
См. также
Операторы
Оператор return (C)
Статья • 03.03.2023 • Чтение занимает 4 мин
Синтаксис
jump-statement :
Пример
В этом примере показана одна программа из нескольких частей. Она
демонстрирует оператор return и использование его для завершения выполнения
функции и, при необходимости, возврата какого-то значения.
// C_return_statement.c
Функция ratio возвращает частное двух int аргументов в виде значения double с
плавающей запятой. Выражение return принудительно использует операцию с
плавающей запятой путем приведения одного из операндов к типу double . В
противном случае будет использоваться оператор целочисленного деления, а
дробная часть будет потеряна.
int main()
int n = 1;
int x = INT_MAX;
report_square();
report_ratio( n, x );
return 0;
cl /W4 C_return_statement.c
Output
1 / 2147483647 = 0.0000000004656613
См. также
Операторы
Ключевое слово _Static_assert и
макрос static_assert (C11)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
C
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Параметры
constant-expression
string-literal
Remarks
Ключевое слово _Static_assert и макрос static_assert позволяют проверить
программное утверждение во время компиляции. Их можно использовать как на
глобальном уровне, так и в области действия функции.
В отличие от этого макрос assert а также функции _assert и _wassert используются
для проверки программного утверждения во время выполнения, что предполагает
дополнительные затраты ресурсов времени выполнения.
#include <assert.h>
enum Items
A,
B,
C,
LENGTH
};
int main()
return 0;
Requirements (Требования)
Макрос Обязательный заголовок
Макрос Обязательный заголовок
static_assert <assert.h>
См. также
_STATIC_ASSERTМакрос
Синтаксис
selection-statement :
labeled-statement :
default : statement
Комментарии
Оператор switch передает управление одному из labeled-statement в своем теле в
зависимости от значения expression .
switch ( expression )
// declarations
// . . .
case constant_expression:
break;
default:
Метки case и default тела оператора switch имеют значения только при
начальной проверке, которая определяет, с какого места тела оператора
начинается выполнение. Операторы switch могут быть вложенными. Любые
статические переменные инициализируются до выполнения любых операторов
switch .
7 Примечание
switch( c )
case 'A':
capital_a++;
case 'a':
letter_a++;
default :
total++;
В этом примере, если переменная c равна 'A' , выполняются все три оператора
тела switch , так как оператор break перед следующим оператором case
отсутствует. Управления передается первому оператору ( capital_a++; ) и
продолжается по-порядку во всей остальной части тела. Если переменная c равна
'a' , увеличиваются значения переменных letter_a и total . Если переменная c не
равна 'A' или 'a' , увеличивается только значение переменной total .
switch( i )
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
В этом примере оператор break указан после каждого оператора тела switch .
Оператор break вызывает принудительный выход из тела оператора после
выполнения одного оператора. Если переменная i равна –1, увеличивается только
значение переменной n . Оператор break после оператора n++; передает
управление за пределы тела оператора, минуя оставшиеся операторы. Аналогично,
если переменная i равна 0, увеличивается только значение переменной z ; если
переменная i равна 1, увеличивается только значение переменной p .
Заключительный оператор break , строго говоря, не требуется, так как управление
передается из тела в конце составного оператора. Он добавлен для единообразия.
switch( c )
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
В этом примере, если constant-expression значение равно любой букве между 'a'
и 'f' , convert_hex вызывается функция .
См. также
Оператор switch (C++)
Оператор try-except (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
try-except-statement :
7 Примечание
Пример
Ниже приведен пример обработчика исключений и обработчика завершения.
Дополнительные сведения об обработчиках завершения см. в разделе Оператор
try-finally (С).
puts("hello");
__try {
puts("in try");
__try {
puts("in try");
RAISE_AN_EXCEPTION();
} __finally {
puts("in finally");
puts("in except");
puts("world");
Output
hello
try-finally-statement :
7 Примечание
Чтобы увидеть, как работает оператор try-finally , см. пример для оператора try-
except.
Синтаксис
iteration-statement :
1. Вычисляется expression .
while ( i >= 0 )
string1[i] = string2[i];
i--;
См. также
Оператор while (C++)
Функции (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
DLL Import and Export Functions (Функции экспорта и импорта библиотек DLL)
Аргументы
Параметры
См. также
Справочник по языку C
Общие сведения о функциях
Статья • 26.09.2022 • Чтение занимает 2 мин
См. также
Функции
Устаревшие формы объявлений и
определений функций
Статья • 03.03.2023 • Чтение занимает 2 мин
double *real;
int a;
return ( *real + a ) ;
Функции, возвращающие целое число или указатель того же размера, что и int , не
обязательно должны иметь объявление, хотя это рекомендуется.
C++
C++
void funct1( int a, ... )
См. также
Общие сведения о функциях
Определения функций в C
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
translation-unit :
external-declaration
translation-unit external-declaration
function-definition
declaration
function-definition :
Параметры прототипа:
declaration-specifiers :
declaration-list :
declaration
declaration-list declaration
declarator :
parameter-list
parameter-list , ...
parameter-list :
parameter-declaration
parameter-list , parameter-declaration
parameter-declaration :
declaration-specifiers declarator
устаревшего стиля */
identifier
identifier-list , identifier
compound-statement :
См. также
Функции
Атрибуты функций
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Определения функций в C
Указание соглашений о вызовах
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Атрибуты функций
Встраиваемые функции
Статья • 03.03.2023 • Чтение занимает 2 мин
Remarks
Подстановка во встроенном коде выполняется только по решению компилятора.
Например, компилятор не подставляет функцию, если ее адрес был получен или
если она слишком велика для подстановки. Если компилятор не подставляет
функцию, определенную в файле заголовка, для компоновщика создается
соответствующая пометка, чтобы избежать нарушений правила единственного
определения (ODR).
inline function-definition
Встроенные функции создают более быстрый и часто более компактный код, чем
эквивалентные вызовы функций.
См. также
inline, __inline, __forceinline
Встроенный ассемблер (C)
Статья • 26.09.2022 • Чтение занимает 2 мин
Следующий код — это простой блок __asm , заключенный в фигурные скобки. (Этот
код является последовательностью пролога пользовательской функции.)
__asm
push ebp
__asm push ebp __asm mov ebp, esp __asm sub esp, __LOCAL_SIZE
См. также
Атрибуты функций
Ключевое слово _Noreturn и макрос
noreturn (C11)
Статья • 03.03.2023 • Чтение занимает 2 мин
#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
exit(3);
fatal_error();
void done(void)
int main(void)
not_coming_back();
return 0;
Requirements (Требования)
Макрос Обязательный заголовок
noreturn <stdnoreturn.h>
См. также
/std (определение стандартной версии языка)
Предупреждение C4702
__declspec(noreturn)
Функции импорта и экспорта DLL
Статья • 03.03.2023 • Чтение занимает 2 мин
DllExport int j;
DllExport int n;
См. также
Определения функций в C
Определения и объявления (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
/* definition. */
return 1;
См. также
Функции импорта и экспорта DLL
Определение подставляемых
функций C с использованием
dllexport и dllimport
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции импорта и экспорта DLL
Правила и ограничения
dllimport/dllexport
Статья • 03.03.2023 • Чтение занимает 2 мин
предупреждение. Пример:
/* takes precedence. */
DllImport int i;
void func2()
void func2()
DllImport int i;
DllExport int i;
void func2()
См. также
Функции импорта и экспорта DLL
Функции Naked
Статья • 03.03.2023 • Чтение занимает 2 мин
/* Function body */
Другой пример:
/* Function body */
См. также
Определения функций в C
Правила и ограничения при
использовании функций Naked
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции naked
Вопросы, связанные с написанием
кода пролога и эпилога
Статья • 03.03.2023 • Чтение занимает 2 мин
int i;
int j;
__asm /* prolog */
push ebp
/* Function body */
__asm /* epilog */
pop ebp
ret
См. также
Функции naked
Класс хранения
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
function-definition :
declaration-specifiers :
extern
static
См. также
Определения функций в C
Возвращаемый тип
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
function-definition :
declaration-specifiers :
type-specifier :
void
char
short
int
long
long long
float
double
long double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name
может указать любой type-specifier основной тип, тип структуры или
объединения.
typedef struct
char name[20];
int id;
long class;
} STUDENT;
7 Примечание
int i;
i = 0;
i++;
if ( s1[i] == '\0' )
return ( s1 );
else
return ( s2 );
См. также
Определения функций в C
Параметры
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
function-definition :
declarator :
parameter-list
parameter-list , ...
parameter-list :
parameter-declaration
parameter-list , parameter-declaration
parameter-declaration :
declaration-specifiers declarator
См. также
Определения функций в C
Текст функции
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
function-definition :
См. также
Определения функций в C
Прототипы функций
Статья • 03.03.2023 • Чтение занимает 2 мин
Синтаксис
declaration :
declaration-specifiers :
init-declarator-list :
init-declarator
init-declarator-list , init-declarator
init-declarator :
declarator
declarator = initializer
declarator :
Прототип может содержать как тип, так и идентификатор для каждого выражения,
которое передается в качестве аргумента. Однако область действия таких
идентификаторов распространяется только до конца объявления. Прототип также
может отражать тот факт, что число аргументов является переменным, или что
никакие аргументы не передаются. Без такого списка выявление несоответствий
невозможно, поэтому компилятор не может создавать соответствующие
диагностические сообщения. Дополнительные сведения о проверке типов
содержатся в статье Аргументы.
Чтобы исправить код, определите или объявите struct или union в глобальной
области перед прототипом функции:
struct S;
См. также
Функции
Вызовы функций
Статья • 03.03.2023 • Чтение занимает 2 мин
expression (expression-listopt)
где expression — это имя функции или выражение, результатом которого является
адрес функции, а expression-list содержит список выражений, разделенных
запятыми. Значения этих выражений являются аргументами, которые передаются
функции. Если функция не возвращает значения, то при ее объявлении
необходимо указать, что она возвращает тип void .
7 Примечание
Пример
В следующем примере представлен вызов функций, совершаемый из оператора
switch :
int main()
/* Function prototypes */
select = 1;
switch( select )
break;
break;
default:
break;
/* Function definition */
int i;
long j;
j += ( *function )( i );
( *function )( i );
См. также
Функции
Аргументы
Статья • 03.03.2023 • Чтение занимает 2 мин
Пример
В следующем примере в качестве аргументов используются указатели:
int main()
/* Function prototype */
int x, y;
/* Function definition */
int t;
t = *num1;
*num1 = *num2;
*num2 = t;
В этом примере функция swap объявлена внутри функции main . Она имеет два
аргумента, num1 и num2 , которые являются указателями на значения типа int .
Параметры num1 и num2 в определении прототипа также объявляются как
указатели на значения типа int .
См. также
Вызовы функций
Вызовы с переменным количеством
аргументов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Вызовы функций
Рекурсивные функции
Статья • 03.03.2023 • Чтение занимает 2 мин
Пример
В следующем примере демонстрируются рекурсивные вызовы.
int main()
См. также
Вызовы функций
Краткие сведения о синтаксисе языка
C
Статья • 03.03.2023 • Чтение занимает 2 мин
7 Примечание
См. также
Справочник по языку C
Определения и соглашения
Статья • 03.03.2023 • Чтение занимает 2 мин
{ expression необ. }
Атрибут Описание
См. также
Краткие сведения о синтаксисе языка C
Лексическая грамматика C
Статья • 03.03.2023 • Чтение занимает 3 мин
Токены
token :
keyword
identifier
constant
string-literal
punctuator
preprocessing-token :
header-name
identifier
pp-number
character-constant
string-literal
punctuator
Ключевые слова
keyword : один из следующих символов:
_Thread_local
identifier-nondigit
identifier identifier-nondigit
identifier digit
identifier-nondigit :
nondigit
universal-character-name
_ a b c d e f g h i j k l m
n o p q r s t u v w x y z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
universal-character-name :
\u hex-quad
\U hex-quad hex-quad
hex-quad :
Константы
constant :
integer-constant
floating-constant
enumeration-constant
character-constant
integer-constant :
decimal-constant :
nonzero-digit
decimal-constant digit
binary-constant :1
binary-prefix binary-digit
binary-constant binary-digit
binary-prefix 1: один из
0b 0B
binary-digit 1: один из
0 1
octal-constant :
0
octal-constant octal-digit
hexadecimal-constant :
hexadecimal-prefix hexadecimal-digit
hexadecimal-constant hexadecimal-digit
0x 0X
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
integer-suffix :
u U
l L
ll LL
floating-constant :
decimal-floating-constant
hexadecimal-floating-constant
decimal-floating-constant :
hexadecimal-floating-constant :
fractional-constant :
digit-sequence .
exponent-part :
+ -
digit-sequence :
digit
digit-sequence digit
hexadecimal-fractional-constant :
hexadecimal-digit-sequence .
binary-exponent-part :
p sign необ. digit-sequence
hexadecimal-digit-sequence :
hexadecimal-digit
hexadecimal-digit-sequence hexadecimal-digit
f l F L
enumeration-constant :
identifier
character-constant :
c-char-sequence :
c-char
c-char-sequence c-char
c-char :
escape-sequence
escape-sequence :
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
universal-character-name
\a \b \f \n \r \t \v
\' \" \\ \?
octal-escape-sequence :
\ octal-digit
\ octal-digit octal-digit
hexadecimal-escape-sequence :
\x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
Строковые литералы
string-literal :
encoding-prefix :
u8
u
U
L
s-char-sequence :
s-char
s-char-sequence s-char
s-char :
escape-sequence
Символы пунктуации
punctuator : один из следующих символов:
[ ] ( ) { } . ->
++ -- & * + - ~ !
!= ^ | && || ? : ; ...
= *= /= %= += -= <<= >>=
&= ^= |= , # ##
h-char-sequence :
h-char
h-char-sequence h-char
h-char :
q-char-sequence :
q-char
q-char-sequence q-char
q-char :
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .
1
binary-constant , binary-prefix и binary-digit — это расширения для систем
Майкрософт.
См. также
Краткие сведения о синтаксисе языка C
Грамматика структуры фразы
Статья • 03.03.2023 • Чтение занимает 2 мин
Выражения
Объявления
Операторы
Внешние определения
См. также
Краткие сведения о синтаксисе языка C
Общие сведения о выражениях
Статья • 03.03.2023 • Чтение занимает 2 мин
primary-expression :
identifier
constant
string-literal
( expression )
generic-selection
generic-selection :
generic-assoc-list :
generic-association
generic-assoc-list , generic-association
generic-association :
type-name : assignment-expression
default : assignment-expression
postfix-expression :
primary-expression
postfix-expression [ expression ]
postfix-expression . identifier
postfix-expression ++
postfix-expression --
( type-name ) { initializer-list }
( type-name ) { initializer-list , }
argument-expression-list :
assignment-expression
argument-expression-list , assignment-expression
unary-expression :
postfix-expression
++ unary-expression
-- unary-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-name )
_Alignof ( type-name )
& * + - ~ !
cast-expression :
unary-expression
( type-name ) cast-expression
multiplicative-expression :
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression / cast-expression
multiplicative-expression % cast-expression
additive-expression :
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression - multiplicative-expression
shift-expression :
additive-expression
relational-expression :
shift-expression
equality-expression :
relational-expression
equality-expression == relational-expression
equality-expression != relational-expression
AND-expression :
equality-expression
exclusive-OR-expression :
AND-expression
exclusive-OR-expression ^ AND-expression
inclusive-OR-expression :
exclusive-OR-expression
inclusive-OR-expression | exclusive-OR-expression
logical-AND-expression :
inclusive-OR-expression
logical-OR-expression :
logical-AND-expression
logical-OR-expression || logical-AND-expression
conditional-expression :
logical-OR-expression
assignment-expression :
conditional-expression
expression :
assignment-expression
expression , assignment-expression
constant-expression :
conditional-expression
См. также
Грамматика структуры фразы
Общие сведения об объявлениях
Статья • 03.03.2023 • Чтение занимает 2 мин
declaration :
static_assert-declaration
declaration-specifiers :
attribute-seq 1:
attribute 1, 2: один из
init-declarator-list :
init-declarator
init-declarator-list , init-declarator
init-declarator :
declarator
declarator = initializer
storage-class-specifier :
auto
extern
register
static
_Thread_local
typedef
__declspec ( extended-decl-modifier-seq ) 1
extended-decl-modifier-seq 1:
extended-decl-modifier opt
extended-decl-modifier-seq extended-decl-modifier
extended-decl-modifier 1:
thread
naked
dllimport
dllexport
type-specifier :
void
char
short
int
__int8 1
__int16 1
__int32 1
__int64 1
long
float
double
signed
unsigned
_Bool
_Complex
atomic-type-specifier
struct-or-union-specifier
enum-specifier
typedef-name
struct-or-union-specifier :
struct-or-union identifier
struct-or-union :
struct
union
struct-declaration-list :
struct-declaration
struct-declaration-list struct-declaration
struct-declaration :
static_assert-declaration
specifier-qualifier-list :
struct-declarator-list :
struct-declarator
struct-declarator-list , struct-declarator
struct-declarator :
declarator
enum-specifier :
enum identifier
enumerator-list :
enumerator
enumerator-list , enumerator
enumerator :
enumeration-constant
enumeration-constant = constant-expression
atomic-type-specifier :
_Atomic ( type-name )
type-qualifier :
const
restrict
volatile
_Atomic
function-specifier :
inline
_Noreturn
alignment-specifier :
_Alignas ( type-name )
_Alignas ( constant-expression )
declarator :
direct-declarator :
identifier
( declarator )
direct-declarator ( parameter-type-list )
pointer :
* type-qualifier-list необ.
type-qualifier-list :
type-qualifier
type-qualifier-list type-qualifier
parameter-type-list :
parameter-list
parameter-list , ...
parameter-list :
parameter-declaration
parameter-list , parameter-declaration
parameter-declaration :
declaration-specifiers declarator
identifier
identifier-list , identifier
type-name :
abstract-declarator :
pointer
direct-abstract-declarator :
( abstract-declarator )
typedef-name :
identifier
initializer :
assignment-expression
{ initializer-list }
{ initializer-list , }
initializer-list :
designation :
designator-list =
designator-list :
designator
designator-list designator
designator :
[ constant-expression ]
. identifier
static_assert-declaration :
2
Дополнительные сведения об этих элементах см. в статьях о __asm, __clrcall,
__stdcall, __based, __fastcall, __thiscall, __cdecl, __inline и __vectorcall.
3
Этот стиль устарел.
statement :
labeled-statement
compound-statement
expression-statement
selection-statement
iteration-statement
jump-statement
jump-statement :
goto identifier ;
continue ;
break ;
compound-statement :
declaration-list :
declaration
declaration-list declaration
statement-list :
statement
statement-list statement
expression-statement :
expression необ. ;
iteration-statement :
if ( expression ) statement
labeled-statement :
identifier : statement
default : statement
translation-unit :
external-declaration
translation-unit external-declaration
function-definition
declaration
См. также
Грамматика структуры фразы
Поведение, определяемое
реализацией
Статья • 03.03.2023 • Чтение занимает 2 мин
7 Примечание
См. также
Справочник по языку C
Перевод: Диагностика
Статья • 03.03.2023 • Чтение занимает 2 мин
filename(line-number) :diagnosticCnumbermessage
См. также
Поведение, определяемое реализацией
Среда
Статья • 03.03.2023 • Чтение занимает 2 мин
Интерактивные устройства
См. также
Поведение, определяемое реализацией
Аргументы функции main
Статья • 03.03.2023 • Чтение занимает 2 мин
Третья строка выше, где main принимает три параметра, является расширением
Майкрософт для стандарта ANSI C. Третий параметр envp — это массив указателей
на переменные среды. Массив envp завершается указателем NULL.
Дополнительные сведения и main envp сведения см. в разделе " main Выполнение
функции и программы".
См. также
Среда
Интерактивные устройства
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Среда
Поведение идентификаторов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Использование ключевого слова extern для задания компоновки
Значимые символы без внешней
компоновки
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Использование ключевого слова extern для задания компоновки
Значимые символы с внешней
компоновкой
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Использование ключевого слова extern для задания компоновки
Верхний и нижний регистр
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Поведение идентификаторов
Знаки
Статья • 03.03.2023 • Чтение занимает 2 мин
Многобайтовая кодировка
Кодировки
Расширенные символы
См. также
Поведение, определяемое реализацией
Набор символов ASCII
Статья • 03.03.2023 • Чтение занимает 2 мин
7 Примечание
См. также
Символы
Многобайтовые символы
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Символы
Число битов на символ
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Символы
Кодировки
Статья • 03.03.2023 • Чтение занимает 2 мин
Escape-последовательность
Escape-последовательность Знак Значение ASCII
\a Предупреждение/звонок 7
\b Backspace 8
\f Перевод страницы 12
\n Новая строка 10
\r Возврат каретки 13
\t Горизонтальная табуляция 9
\v Вертикальная табуляция 11
См. также
Символы
Непредставимые символьные
константы
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Символы
Расширенные символы
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Символы
Преобразование многобайтовых
символов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Символы
Диапазон значений типа char
Статья • 03.03.2023 • Чтение занимает 2 мин
ANSI 3.2.1.1 Имеет ли "простой" тип char тот же диапазон значений, что и signed
char или unsigned char
Все знаковые значения char находятся в диапазоне от –128 до 127. Все беззнаковые
значения char находятся в диапазоне от 0 до 255.
См. также
Символы
Целые числа
Статья • 03.03.2023 • Чтение занимает 2 мин
Остатки от деления
Сдвиги вправо
См. также
Поведение, определяемое реализацией
Диапазон целочисленных значений
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Целые числа
Понижение уровня целых чисел
Статья • 03.03.2023 • Чтение занимает 2 мин
Когда целое число типа long приводится к типу short или тип short приводится к
типу char , младшие байты сохраняются.
Например, строкой
short x = (short)0x12345678L;
char y = (char)0x1234;
См. также
Целые числа
Битовые операции со знаком
Статья • 03.03.2023 • Чтение занимает 2 мин
11111111 11110000
_________________
00000000 01100000
См. также
Целые числа
Остатки от деления
Статья • 03.03.2023 • Чтение занимает 2 мин
50 / -6 == -8
50 % -6 == 2
-50 / 6 == -8
-50 % 6 == -2
См. также
Целые числа
Сдвиги вправо
Статья • 03.03.2023 • Чтение занимает 2 мин
При сдвиге вправо бит знака целочисленных типов со знаком сохраняется. При
сдвиге вправо целого числа со знаком старший значащий бит остается
установленным. Например, если число 0xF0000000 имеет int со знаком, то при
сдвиге вправо получается число 0xF8000000. Если 32 раза выполнить сдвиг вправо
отрицательного int , в результате получается число 0xFFFFFFFF.
При сдвиге вправо целого числа без знака старший значащий бит очищается.
Например, если число 0xF000 не имеет знака, в результате получается 0x7800. При
сдвиге 32 раза unsigned или положительного числа int вправо получается число
0x00000000.
См. также
Целые числа
Вычисления с плавающей запятой
Статья • 03.03.2023 • Чтение занимает 2 мин
Значения
См. также
Поведение, определяемое реализацией
Значения
Статья • 03.03.2023 • Чтение занимает 2 мин
Тип float представлен 32 битами: 1 для знака, 8 для экспоненты и 23 для мантиссы.
Он имеет диапазон +/–3,4E38 с точностью не менее 7 знаков.
Тип long double отличается, но имеет такое же представление, как и тип double в
компиляторе C Майкрософт.
См. также
Вычисления с плавающей запятой
Приведение целочисленных
значений к значениям с плавающей
запятой
Статья • 03.03.2023 • Чтение занимает 2 мин
Например, приведение числа типа unsigned long (точность — 32 бита) к типу float
(мантисса которого имеет точность 23 бита) приводит к округлению числа до
ближайшего кратного 256. Значения long в диапазоне от 4 294 966 913 до
4 294 967 167 округляются до значения 4 294 967 040 с типом float .
См. также
Вычисления с плавающей запятой
Усечение значений с плавающей
запятой
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Вычисления с плавающей запятой
Массивы и указатели
Статья • 03.03.2023 • Чтение занимает 2 мин
Вычитание указателей
См. также
Поведение, определяемое реализацией
Максимальный размер массива
Статья • 26.09.2022 • Чтение занимает 2 мин
unsigned __int64 .
См. также
Массивы и указатели
Вычитание указателей
Статья • 03.03.2023 • Чтение занимает 2 мин
ANSI 3.3.6, 4.1.1 Тип целого числа, необходимый для сохранения различия между
двумя указателями на элементы одного массива, ptrdiff_t
__int64 .
См. также
Массивы и указатели
Регистры: доступность регистров
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Поведение, определяемое реализацией
Структуры, объединения,
перечисления и битовые поля
Статья • 03.03.2023 • Чтение занимает 2 мин
Тип перечисления
См. также
Поведение, определяемое реализацией
Неправильный доступ к объединению
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Структуры, объединения, перечисления и битовые поля
Заполнение и выравнивание членов
структуры
Статья • 03.03.2023 • Чтение занимает 2 мин
offset%alignment-requirement== 0
См. также
Структуры, объединения, перечисления и битовые поля
Знак битовых полей
Статья • 03.03.2023 • Чтение занимает 2 мин
ANSI 3.5.2.1 Два типа обработки обычного поля int : как битовое поле signed int
или как битовое поле unsigned int
Битовые поля могут быть со знаком или без знака. Обычные битовые поля
обрабатываются как поля со знаком.
См. также
Структуры, объединения, перечисления и битовые поля
Хранение битовых полей
Статья • 03.03.2023 • Чтение занимает 2 мин
struct mybitfields
unsigned a : 4;
unsigned b : 5;
unsigned c : 7;
} test;
test.a = 2;
test.b = 31;
test.c = 0;
00000001 11110010
cccccccb bbbbaaaa
См. также
Структуры, объединения, перечисления и битовые поля
Тип enum
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Структуры, объединения, перечисления и битовые поля
Квалификаторы: доступ к временным
объектам
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Поведение, определяемое реализацией
Деклараторы: максимальное число
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Поведение, определяемое реализацией
Операторы: ограничения операторов
switch
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Поведение, определяемое реализацией
Директивы предварительной
обработки
Статья • 03.03.2023 • Чтение занимает 2 мин
Последовательности символов
Директивы pragma
См. также
Поведение, определяемое реализацией
Символьные константы и условное
включение
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Директивы предварительной обработки
Включение имен файлов в скобках
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Директивы предварительной обработки
Включение имен файлов в кавычках
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Директивы предварительной обработки
Последовательности символов
Статья • 03.03.2023 • Чтение занимает 2 мин
#include "path1\path2\myfile"
Однако в самом исходном коде необходимо указывать две обратные косые черты
подряд:
См. также
Директивы предварительной обработки
Директивы pragma
Статья • 03.03.2023 • Чтение занимает 2 мин
alloc_text
auto_inline
check_stack
code_seg
comment
data_seg
function
hdrstop
include_alias
inline_depth
inline_recursion
intrinsic
message
optimize
pack
setlocale
warning
См. также
Директивы предварительной обработки
Дата и время по умолчанию
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Директивы предварительной обработки
Функции библиотеки
Статья • 03.03.2023 • Чтение занимает 2 мин
Макрос NULL
Тестирование символов
Ошибки домена
Функция fmod
Функция signal
Сигналы по умолчанию
Пустые строки
Символы NULL
Буферизация файла
Имена файлов
Диапазоны чтения
Функция abort
Функция atexit
Имена сред
Функция system
Функция strerror
Часовой пояс
Функция clock
См. также
Поведение, определяемое реализацией
Макрос NULL
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Диагностика, напечатанная функцией
assert
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Тестирование символов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Ошибки домена
Статья • 03.03.2023 • Чтение занимает 2 мин
Файл ERRNO.H определяет для константы ошибки домена EDOM значение 33. См.
сведения о возвращаемом значении в разделе справки, посвященном конкретной
функции, вызвавшей ошибку.
См. также
Функции библиотеки
Потеря точности значений с
плавающей запятой
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Функция fmod
Статья • 03.03.2023 • Чтение занимает 2 мин
ANSI 4.5.6.4 Действие в случае, если второй аргумент функции fmod равен нулю:
возникает ошибка домена или возвращается нулевое значение
Если второй аргумент функции fmod равен нулю, функция возвращает ноль.
См. также
Функции библиотеки
Функция signal (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Сигналы по умолчанию
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Завершающие символы новой строки
Статья • 03.03.2023 • Чтение занимает 2 мин
Функции потока распознают новую строку или конец файла как конечный символ
строки.
См. также
Функции библиотеки
Пустые строки
Статья • 03.03.2023 • Чтение занимает 2 мин
Пробелы сохраняются.
См. также
Функции библиотеки
Символы NULL
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Позиция файла в режиме добавления
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Усечение текстовых файлов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Буферизации файла
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Файлы нулевой длины
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Имена файлов
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Ограничения доступа к файлам
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Удаление открытых файлов
Статья • 03.03.2023 • Чтение занимает 2 мин
Функция удаления удаляет файл. Если файл открыт, эта функция не выполняется и
возвращает значение -1.
См. также
Функции библиотеки
Переименование с использованием
существующего имени
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Чтение значений указателя
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Диапазоны чтения
Статья • 03.03.2023 • Чтение занимает 2 мин
В следующей строке
См. также
Функции библиотеки
Ошибки позиции файла
Статья • 03.03.2023 • Чтение занимает 2 мин
В случае сбоя функции fgetpos или ftell для макроса errno задается значение
константы EINVAL из манифеста, если недопустима позиция, или значение EBADF ,
если недопустим номер файла. Эти константы определены в файле ERRNO.H.
См. также
Функции библиотеки
Сообщения, созданные функцией
perror
Статья • 03.03.2023 • Чтение занимает 2 мин
0 Error 0
10
11
13 Permission denied
14
15
16
17 File exists
18 Cross-device link
19
20
21
22 Invalid argument
23
25
26
27
29
30
31
32
33 Math argument
35
См. также
Функции библиотеки
Выделение обнуленной памяти
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Функция abort (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Функция atexit (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Имена сред
Статья • 03.03.2023 • Чтение занимает 2 мин
ANSI 4.10.4.4 Набор имен среды и метод, который используется для изменения
списка среды, используемого функцией getenv
См. также
Функции библиотеки
_putenv, _wputenv
getenv, _wgetenv
Функция system
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Функция strerror
Статья • 03.03.2023 • Чтение занимает 2 мин
0 Error 0
10
11
13 Permission denied
14
15
16
17 File exists
18 Cross-device link
19
20
21
22 Invalid argument
23
25
26
27
29
30
31
32
33 Math argument
35
См. также
Функции библиотеки
Функция clock (C)
Статья • 03.03.2023 • Чтение занимает 2 мин
См. также
Функции библиотеки
Справочник по препроцессору в
C/C++
Статья • 26.09.2022 • Чтение занимает 2 мин
Содержимое раздела
Препроцессор
Директивы препроцессора
Операторы препроцессора
Предустановленные макросы
Директивы pragma
Связанные разделы
Справочник по языку C++
Справочник по языку C
В этом разделе
Подпрограммы универсальной среды выполнения C по категориям
Глобальные константы
Глобальное состояние
Связанные разделы
Подпрограммы отладки
Отладка