Правило «как будто»
Позволяет любые преобразования кода, не изменяющие наблюдаемого поведения программы.
Объяснение
Компилятор C имеет право вносить любые изменения в программу, при условии соблюдения следующих требований:
| 1) В каждой точке последовательности значения всех переменных типа volatile стабильны (предыдущие вычисления завершены, новые не начаты). | (до C11) |
| 1) Доступ (чтение и запись) к переменным типа volatile происходит строго в соответствии с семантикой выражений, в которых они встречаются. В частности, они не переупорядочиваются относительно других обращений к volatile на том же потоке. | (с C11) |
2) При завершении программы данные, записанные в файлы, будут такими же, как если бы программа выполнялась как написана.
3) Текст запроса, отправленный на интерактивные устройства, будет отображён перед тем, как программа будет ожидать ввода.
4) Если поддерживается псевдоним #pragma STDC FENV_ACCESS и установлен в ON, изменения в среде обработки чисел с плавающей точкой (исключения и режимы округления чисел с плавающей точкой) гарантированно будут наблюдаться операторами и функциями вычисления с плавающей точкой как будто они выполнялись как написано, за исключением того, что
| (с C99) |
Примечания
См. также
| Документация C++ для правила «как будто» |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/as_if