Выражения
Выражение — это последовательность операторов и их операндов, задающая вычисление.
Вычисление выражения может давать результат (например, вычисление 2 + 2 даёт результат 4), может иметь побочные эффекты (например, вычисление printf("%d", 4) отправляет символ '4' в стандартный поток вывода) и может обозначать объекты или функции.
Общие сведения
- категории значений (lvalue, объект, не являющийся lvalue, обозначение функции) классифицируют выражения по их значениям
- порядок вычисления аргументов и подвыражений задаёт порядок получения промежуточных результатов
Операторы
| Распространённые операторы | ||||||
|---|---|---|---|---|---|---|
| присваивание |
инкремент декремент | арифметические | логические | сравнения |
доступ к членам | прочие |
|
|
|
|
|
|
|
|
- приоритет операторов задаёт порядок связывания операторов с их аргументами
- альтернативные представления — это альтернативные написания некоторых операторов
Преобразования
- Неявные преобразования выполняются, когда типы операндов не соответствуют требованиям операторов
- Приведения типов можно использовать для явного преобразования значений из одного типа в другой.
Прочее
- константные выражения могут вычисляться во время компиляции и использоваться в контексте времени компиляции (размеры массивов не VLA(начиная с C99), статические инициализаторы и т. д.)
| (начиная с C11) |
| (начиная с C99) |
Первичные выражения
Операндами любого оператора могут быть другие выражения или первичные выражения (например, в 1 + 2 * 3 операндами оператора+ являются подвыражение 2 * 3 и первичное выражение 1).
К первичным выражениям относятся:
2 или "Hello, world")| 3) Обобщённые выборы | (начиная с C11) |
Любое выражение в скобках также классифицируется как первичное выражение: это гарантирует, что скобки имеют более высокий приоритет, чем любой оператор.
Константы и литералы
Константные значения некоторых типов можно встраивать в исходный код программы на C с помощью специальных выражений, называемых литералами (для выражений-lvalue) и константами (для выражений, не являющихся lvalue)
- целочисленные константы — это десятичные, восьмеричные или шестнадцатеричные числа целочисленного типа.
- символьные константы — это отдельные символы типа int, подходящие для преобразования в символьный тип, или типа char8_t,(начиная с C23) char16_t, char32_t или(начиная с C11) wchar_t
- константы с плавающей точкой — это значения типа float, double или longdouble
| (начиная с C23) |
-
строковые литералы — это последовательности символов типа
char[],char8_t[](начиная с C23),char16_t[],char32_t[],(начиная с C11) илиwchar_t[], представляющие строки с завершающим нулевым символом
| (начиная с C99) |
Невычисляемые выражения
Операнды оператора sizeof — это выражения, которые не вычисляются (если только они не являются VLA)(начиная с C99). Поэтому size_t n = sizeof(printf("%d", 4)); не выполняет вывод в консоль.
| Операнды оператора | (начиная с C11) |
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 6.5 Выражения (с.: TBD)
- 6.6 Константные выражения (с.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 6.5 Выражения (с.: 55–75)
- 6.6 Константные выражения (с.: 76–77)
- Стандарт C11 (ISO/IEC 9899:2011):
- 6.5 Выражения (с.: 76–105)
- 6.6 Константные выражения (с.: 106–107)
- Стандарт C99 (ISO/IEC 9899:1999):
- 6.5 Выражения (с.: 67–94)
- 6.6 Константные выражения (с.: 95–96)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 3.3 ВЫРАЖЕНИЯ
- 3.4 КОНСТАНТНЫЕ ВЫРАЖЕНИЯ
См. также
| Документация по C++ о выражениях |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/language/expressions