Namespaces
Variants

C attribute: unsequenced, reproducible (since C23)

From cppreference.net

함수 호출의 특정 속성을 추론할 수 있도록, 함수에 의한 객체 접근에 관한 정보를 컴파일러에 제공합니다.

목차

구문

[[ unsequenced ]]
[[ __unsequenced__ ]]
(1)
[[ reproducible ]]
[[ __reproducible__ ]]
(2)
1) 함수가 effectless , idempotent , stateless , 그리고 independent 함을 나타냅니다.
2) 함수가 효과가 없고 멱등성을 가짐을 나타냅니다.

설명

이러한 특성은 함수 선언자 또는 함수 타입을 가진 타입 지정자에 적용됩니다. 해당 특성은 함수 타입의 속성입니다.

효과 없음

함수 호출의 평가는 호출 중에 순서가 정해진 저장 연산이 호출과 동기화되는 객체의 수정인 경우 효과가 없습니다; 추가적으로 해당 연산이 관찰 가능한 경우, 객체에 대한 모든 접근은 함수의 고유 포인터 매개변수를 기반으로 해야 합니다.

멱등성

평가 E 가 멱등성을 가지려면 E 의 두 번째 평가가 원본 평가 직후에 연속적으로 수행되더라도 결과 값(있는 경우)이나 실행의 관찰 가능한 상태가 변경되지 않아야 합니다.

무상태

함수 F 는 정적 또는 스레드 저장 기간 을 가지는 객체의 정의가 F 내부에서 또는 F 에 의해 호출되는 함수 내부에서 const 로 한정되었지만 volatile 로 한정되지 않은 경우 상태를 가지지 않습니다.

독립적

함수 F 가 독립적이려면, 호출의 매개변수를 기반으로 하지 않는 lvalue를 통해 F 호출로 관찰되는 객체 X 에 대해, 동일한 프로그램 실행 동안 F 의 모든 호출에서 X 에 대한 모든 접근이 동일한 값을 관찰해야 합니다; 그렇지 않고 접근이 포인터 매개변수를 기반으로 하는 경우, X 에 대한 모든 접근이 P 를 기반으로 하는 lvalue여야 하는 고유한 포인터 매개변수 P 가 존재해야 합니다.

객체 X 는 둘이 동기화하고, 호출에 대해 지역적이지 않으며, X 의 수명이 함수 호출 전에 시작되고, 호출 중에 X 의 접근이 순서화된 경우 함수 호출에 의해 관찰됩니다; 호출 전에 저장된 X 의 마지막 값(있는 경우)은 호출에 의해 관찰되는 X 의 값이라고 합니다.

참고 사항

이러한 속성들은 컴파일러 최적화를 목적으로 존재합니다.

함수가 재현 가능한 경우, 여러 번의 연속적인 호출을 단일 호출로 취급할 수 있습니다.

함수가 비순차적(unsequenced)인 경우, 여러 번의 후속 호출을 단일 호출로 취급할 수 있으며, 호출은 임의로 병렬화 및 재정렬될 수 있습니다.