Книга: Язык программирования Си. Издание 3-е, исправленное
A7.19. Константные выражения
A7.19. Константные выражения
Синтаксически, константное выражение - это выражение с ограниченным подмножеством операторов:
константное-выражение:
условное-выражение
При указании case-меток в переключателе, задании границ массивов и длин полей битов, на месте значений перечислимых констант и инициализаторов, а также в некоторых выражениях для препроцессора требуются выражения, вычисление которых приводит к константе.
Константные выражения не могут содержать присваиваний, операторов инкрементирования и декрементирования, вызовов функций и операторов-запятых; перечисленные ограничения не распространяются на операнд оператора sizeof. Если требуется получить целочисленное константное выражение, то его операнды должны состоять из целых, перечислимых (enum), символьных констант и констант с плавающей точкой; операции приведения должны специфицировать целочисленный тип, а любая константа с плавающей точкой - приводиться к целому. Из этого следует, что в константном выражении не может быть массивов, операций косвенного обращения (раскрытия указателя), получения адреса и доступа к полям структуры. (Однако для sizeof возможны операнды любого вида.)
Для константных выражений в инициализаторах допускается большая свобода; операндами могут быть константы любого типа, а к внешним или статическим объектам и внешним и статическим массивам, индексируемым константными выражениями, возможно применять унарный оператор &. Унарный оператор & может также неявно присутствовать при использовании массива без индекса или функции без списка аргументов. Вычисление инициализатора должно давать константу или адрес ранее объявленного внешнего или статического объекта плюс-минус константа.
Меньшая свобода допускается для целочисленных константных выражений, используемых после #if: не разрешаются sizeof-выражения, константы типа enum и операции приведения типа. (см. A12.5.)
- 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. Константные выражения
- A7.11. Оператор побитового И
- Константные выражения
- A7.13. Оператор побитового ИЛИ
- A7.5. Оператор приведения типа
- A7.12. Оператор побитового исключающего ИЛИ
- A12.5. Условная компиляция
- Индексы по выражениям
- Выражения в значениях по умолчанию для доменов
- Выражения в EXCEPTION
- 6. Выражения реляционной алгебры
- 3.13.7. Рекурсия в регулярных выражениях
- 6. Лекция: Обработка текстов. Регулярные выражения. Unicode.