Spec-Zone.ru › C

Атрибут C: неупорядоченный, воспроизводимый (с C23)

Предоставляет компилятору информацию об обращении к объектам функцией, чтобы можно было вывести определенные свойства вызовов функций.

Синтаксис

[[ unsequenced ]]
[[ __unsequenced__ ]]
(1)
[[ reproducible ]]
[[ __reproducible__ ]]
(2)
1) Указывает, что функция не имеет побочных эффектов, идемпотентна, бессостоятельна и независима
2) Указывает, что функция не имеет побочных эффектов и идемпотентна

Объяснение

Эти атрибуты применяются к декларатору функции или к спецификатору типа, имеющему тип функции. Соответствующий атрибут является свойством типа функции.

Без побочных эффектов

Вычисление вызова функции не имеет побочных эффектов, если любая операция сохранения, упорядоченная во время вызова, является изменением объекта, который синхронизируется с вызовом; если дополнительно операция наблюдаема, все обращение к объекту должно основываться на уникальном параметре-указателе функции.

Идемпотентность

Вычисление E является идемпотентным, если второе вычисление E можно упорядочить сразу после исходного, не изменяя полученное значение, если таковое имеется, или наблюдаемое состояние выполнения.

Бессостоятельность

Функция F является бессостоятельной, если любое определение объекта со статической или потоковой длиной хранения в F или в вызываемой F функции является const, но не volatile, квалификацией.

Независимость

Функция F является независимой, если для любого объекта X, который наблюдается вызовом F через lvalue, не основанное на параметре вызова, все обращения к X во всех вызовах F во время одного выполнения программы наблюдают одно и то же значение; в противном случае, если доступ основан на параметре-указателе, должен быть единственный такой параметр-указатель P, такой что любое обращение к X должно быть к lvalue, которое основано на P.

Объект X наблюдается вызовом функции, если оба синхронизируются, если X не является локальным для вызова, если X имеет срок жизни, который начинается до вызова функции, и если доступ к X упорядочен во время вызова; последнее значение X, если таковое имеется, которое сохраняется перед вызовом, называется значением X, которое наблюдается вызовом.

Примечания

Эти атрибуты предназначены для оптимизации компилятора.

Если функция воспроизводима, несколько последующих вызовов можно рассматривать как один вызов.

Если функция неупорядоченная, несколько последующих вызовов можно рассматривать как один вызов, и вызовы можно параллелить и произвольно переупорядочивать.

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

Spec-Zone.ru

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