Namespaces
Variants

As-if rule

From cppreference.net

프로그램의 관찰 가능한 동작을 변경하지 않는 모든 코드 변환을 허용합니다.

설명

C 컴파일러는 다음이 유지되는 한 프로그램에 어떤 변경이든 수행할 수 있습니다:

1) 모든 시퀀스 포인트 에서, 모든 volatile 객체의 값은 안정적입니다 (이전 평가는 완료되고, 새로운 평가는 시작되지 않음).
(until C11)
1) volatile 객체에 대한 접근(읽기 및 쓰기)은 발생하는 표현식의 의미론에 따라 엄격하게 수행됩니다. 특히, 동일 스레드 내의 다른 volatile 접근과 관련하여 재배열되지 않습니다 .
(since C11)
2) 프로그램 종료 시, 파일에 기록된 데이터는 프로그램이 작성된 대로 실행된 경우와 정확히 동일합니다.
3) 대화형 장치로 전송되는 프롬프팅 텍스트는 프로그램이 입력을 대기하기 전에 표시됩니다.
4) pragma #pragma STDC FENV_ACCESS 가 지원되고 ON 으로 설정된 경우, 부동 소수점 환경 (부동 소수점 예외 및 반올림 모드)에 대한 변경 사항은 다음과 같은 예외를 제외하고 작성된 대로 실행되는 것처럼 부동 소수점 산술 연산자 및 함수 호출에서 관찰됨이 보장됩니다:
  • 캐스트 및 할당 이외의 모든 부동 소수점 표현식의 결과는 표현식의 유형과 다른 부동 소수점 유형의 범위와 정밀도를 가질 수 있음 ( FLT_EVAL_METHOD 참조),
  • 위 사항에도 불구하고, 모든 부동 소수점 표현식의 중간 결과는 무한 범위와 정밀도로 계산된 것처럼 계산될 수 있음 ( #pragma STDC FP_CONTRACT OFF 가 아닌 경우).
(C99부터)

참고 사항

참고 항목

C++ 문서 참조: as-if rule