Spec-Zone.ru › C

Правило «как будто»

Позволяет любые преобразования кода, не изменяющие наблюдаемого поведения программы.

Объяснение

Компилятор C имеет право вносить любые изменения в программу, при условии соблюдения следующих требований:

1) В каждой точке последовательности значения всех переменных типа volatile стабильны (предыдущие вычисления завершены, новые не начаты). (до C11)
1) Доступ (чтение и запись) к переменным типа volatile происходит строго в соответствии с семантикой выражений, в которых они встречаются. В частности, они не переупорядочиваются относительно других обращений к volatile на том же потоке. (с C11)
2) При завершении программы данные, записанные в файлы, будут такими же, как если бы программа выполнялась как написана.
3) Текст запроса, отправленный на интерактивные устройства, будет отображён перед тем, как программа будет ожидать ввода.
4) Если поддерживается псевдоним #pragma STDC FENV_ACCESS и установлен в ON, изменения в среде обработки чисел с плавающей точкой (исключения и режимы округления чисел с плавающей точкой) гарантированно будут наблюдаться операторами и функциями вычисления с плавающей точкой как будто они выполнялись как написано, за исключением того, что
  • результат любого выражения с плавающей точкой, кроме приведения типов и присваивания, может иметь диапазон и точность типа с плавающей точкой, отличного от типа выражения (см. FLT_EVAL_METHOD),
  • несмотря на вышесказанное, промежуточные результаты любого выражения с плавающей точкой могут быть вычислены как будто с бесконечным диапазоном и точностью (если не #pragma STDC FP_CONTRACT не OFF).
(с C99)

Примечания

См. также

  • Порядок вычислений
Документация C++ для правила «как будто»

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/as_if

Spec-Zone.ru

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