Spec-Zone.ru › C

Выражения

Выражение — это последовательность операторов и их операндов, которая определяет вычисление.

Вычисление выражения может привести к результату (например, вычисление 2+2 даёт результат 4), может вызвать побочные эффекты (например, вычисление printf("%d",4) отправляет символ '4' в стандартный поток вывода) и может указывать на объекты или функции.

Общие сведения

  • категории значений (lvalue, не-lvalue объект, указатель на функцию) классифицируют выражения по их значениям
  • порядок вычисления аргументов и подвыражений определяет порядок получения промежуточных результатов

Операторы

Общие операторы
присваивание инкремент
декремент
арифметические логические сравнения члены
доступ
другие

a = b a += b a -= b a *= b a /= b a %= b a &= b a |= b a ^= b a <<= b a >>= b

++a --a a++ a--

+a -a a + b a - b a * b a / b a % b ~a a & b a | b a ^ b a << b a >> b

!a a && b a || b

a == b a != b a < b a > b a <= b a >= b

a[b] *a &a a->b a.b

a(...) a, b (type) a a ? b : c sizeof

_Alignof
(с C11)

  • приоритет операторов определяет порядок связывания операторов с их аргументами
  • альтернативные представления — альтернативные написания некоторых операторов

Преобразования

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

Другое

  • постоянные выражения могут быть вычислены во время компиляции и использоваться в контексте компиляции (размеры массивов без VLA(с C99) , статические инициализаторы и т. д.)
  • Общие выборки могут выполнять разные выражения в зависимости от типов аргументов
(с C11)
  • Вещественные выражения могут вызывать исключения и сообщать об ошибках, как указано в math_errhandling
  • Стандартные #псевдодирективы FENV_ACCESS, FP_CONTRACT, и CX_LIMITED_RANGE, а также точность вычисления с плавающей точкой и направление округления управляют способом выполнения выражений с плавающей точкой.
(с C99)

Первичные выражения

Операнды любого оператора могут быть другими выражениями или могут быть первичными выражениями (например, в 1+2*3, операнды оператора+ — подвыражение 2*3 и первичное выражение 1).

Первичные выражения — это любое из следующего:

1) Константы и литералы (например, 2 или "Hello, world")
2) Соответствующим образом объявленные идентификаторы (например, n или printf)
3) Общие выборки (с C11)

Любое выражение в скобках также классифицируется как первичное выражение: это гарантирует, что скобки имеют более высокий приоритет, чем любой оператор.

Константы и литералы

Постоянные значения определенных типов могут быть вставлены в исходный код программы C с использованием специальных выражений, известных как литералы (для выражений lvalue) и константы (для выражений не-lvalue).

  • целочисленные константы — десятичные, восьмеричные или шестнадцатеричные числа целочисленного типа.
  • символьные константы — отдельные символы типа int , пригодные для преобразования в символьный тип или типа char8_t,(с C23) char16_t, char32_t, или (с C11)wchar_t
  • вещественные константы — значения типа float, double, или long double
  • предопределенные константы true/false — значения типа bool
  • предопределенная константа nullptr — значение типа nullptr_t
(с C23)
  • строковые литералы — последовательности символов типа char[], char8_t[](с C23), char16_t[], char32_t[],(с C11) или wchar_t[] , представляющие нуль-терминированные строки
  • сложные литералы — значения типа struct, union или array, непосредственно вставленные в код программы
(с C99)

Невычисляемые выражения

Операнды оператора sizeof — это выражения, которые не вычисляются (если это не VLA)(с C99). Таким образом, size_t n = sizeof(printf("%d", 4)); не выполняет вывод в консоль.

Операнды оператора _Alignof, выражение управления общей выборкой и выражения размера VLA, которые являются операндами _Alignof, также являются выражениями, которые не вычисляются.

(с 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API