Выражения
Выражение — это последовательность операторов и их операндов, которая определяет вычисление.
Вычисление выражения может привести к результату (например, вычисление 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, илиlong double
| (с C23) |
- строковые литералы — последовательности символов типа
char[],char8_t[](с C23),char16_t[],char32_t[],(с C11) илиwchar_t[], представляющие нуль-терминированные строки
| (с C99) |
Невычисляемые выражения
Операнды оператора sizeof — это выражения, которые не вычисляются (если это не VLA)(с C99). Таким образом, size_t n = sizeof(printf("%d", 4)); не выполняет вывод в консоль.
| Операнды оператора | (с C11) |
Ссылки
- Стандарт 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/w/c/language/expressions