As-if rule
From cppreference.net
Позволяет любые и все преобразования кода, которые не изменяют наблюдаемое поведение программы.
Объяснение
Компилятору C разрешено вносить любые изменения в программу при условии, что следующее остается верным:
|
1)
В каждой
точке следования
значения всех
volatile
объектов стабильны (предыдущие вычисления завершены, новые вычисления не начаты).
|
(until C11) |
|
1)
Доступы (чтения и записи) к
volatile
объектам происходят строго в соответствии с семантикой выражений, в которых они встречаются. В частности, они
не переупорядочиваются
относительно других обращений к volatile объектам в том же потоке.
|
(since C11) |
2)
При завершении программы данные, записанные в файлы, точно соответствуют тому, как если бы программа была выполнена в соответствии с написанным кодом.
3)
Текст приглашения, отправляемый на интерактивные устройства, будет отображаться до того, как программа начнет ожидать ввод данных.
|
4)
Если поддерживается прагма
#pragma STDC FENV_ACCESS
и она установлена в
ON
, то изменения в
окружении с плавающей точкой
(исключения с плавающей точкой и режимы округления) гарантированно соблюдаются операторами и вызовами функций с плавающей точкой, как если бы они выполнялись в точности как записано, за исключением того, что
|
(начиная с C99) |
Примечания
|
Этот раздел не завершён
Причина: заполнить аналогично cpp/language/as_if |
Смотрите также
|
C++ documentation
для
as-if rule
|