Книга: Язык программирования Си. Издание 3-е, исправленное
A7. Выражения
Приоритеты описываемых операторов имеют тот же порядок, что и пункты данного параграфа (от высших к низшим). Например, для оператора +, описанного в A7.7, термин "операнды" означает "выражения, определенные в A7.1-A7.6". В каждом пункте описываются операторы, имеющие одинаковый приоритет, и указывается их ассоциативность (левая или правая). Приоритеты и ассоциативность всех операторов отражены в грамматике, приведенной в A13.
Приоритеты и ассоциативность полностью определены, а вот порядок вычисления выражения не определен за некоторым исключением даже для подвыражений с побочным эффектом. Это значит, что если в определении оператора последовательность вычисления его операндов специально не оговаривается, то в реализации можно свободно выбирать любой порядок вычислений и даже чередовать правый и левый порядок. Однако любой оператор использует значения своих операндов в точном соответствии с грамматическим разбором выражения, в котором он встречается.
Это правило отменяет ранее предоставлявшуюся свободу в выборе порядка выполнения операций, которые математически коммутативны и ассоциативны, но которые в процессе вычислений могут таковыми не оказаться. Это изменение затрагивает только вычисления с плавающей точкой, выполняющиеся "на грани точности", и ситуации, когда возможно переполнение.
В языке не определен контроль за переполнением, делением на нуль и другими исключительными ситуациями, возникающими при вычислении выражения. В большинстве существующих реализаций Си при вычислении знаковых целочисленных выражений и присваивании переполнение игнорируется, но результат таких вычислений не определен. Трактовки деления на нуль и всех исключительных ситуаций, связанных с плавающей точкой, могут не совпадать в разных реализациях; иногда для обработки исключительных ситуаций предоставляется нестандартная библиотечная функция.
- A7.1. Генерация указателя
- A7.2. Первичные выражения
- A7.3. Постфиксные выражения
- А7.4. Унарные операторы
- A7.5. Оператор приведения типа
- A7.6. Мультипликативные операторы
- A7.7. Аддитивные операторы
- A7.8. Операторы сдвига
- A7.9. Операторы отношения
- A7.10. Операторы равенства
- A7.11. Оператор побитового И
- A7.12. Оператор побитового исключающего ИЛИ
- A7.13. Оператор побитового ИЛИ
- A7.14. Оператор логического И
- A7.15. Оператор логического ИЛИ
- А7.16. Условный оператор
- A7.17. Выражения присваивания
- A7.18. Оператор запятая
- A7.19. Константные выражения
- Индексы по выражениям
- Выражения в значениях по умолчанию для доменов
- Выражения в EXCEPTION
- 6. Выражения реляционной алгебры
- 3.13.7. Рекурсия в регулярных выражениях
- 6. Лекция: Обработка текстов. Регулярные выражения. Unicode.
- Применение лямбда-выражения в качестве задачи
- 4.2.2. Возвращаясь к строкам и регулярным выражениям
- Выражения с двумя цифрами
- 2.11 Условные выражения
- ГЛАВА 21. Выражения и предикаты.
- 12.8. Регулярные выражения