Понимание ограничить классификатор на примерах

restrict ключевое слово'Поведение s определено в C99 6.7.3.1:

Пусть D будет объявлением обычного идентификатора, который обеспечивает средство для обозначения объекта P как ограниченного указателем типа T.

Если D появляется внутри блока и не имеет внешнего класса хранения, пусть B обозначает блок. Если D появляется в списке объявлений параметров определения функции, пусть B обозначает связанный блок. В противном случае пусть B обозначает блок main (или блок любой функции, вызываемой при запуске программы в автономной среде).

В последующем выражение указателя E называется основанным на объекте P, если (в некоторой точке последовательности при выполнении B до оценки E) модифицировать P так, чтобы он указывал на копию объекта массива, на который он ранее указывал изменит значение E.119) Обратите внимание, что ''основан'' определяется только для выражений с типами указателей.

Во время каждого выполнения B пусть L будет любым значением l, которое имеет &L на основе P. Если L используется для доступа к значению объекта X, который он обозначает, и X также модифицируется (любыми средствами), то применяются следующие требования: T не должен быть константным. Каждое другое lvalue, используемое для доступа к значению X, должно также иметь свой адрес на основе P. Каждый доступ, который изменяет X, должен также рассматриваться как модифицирующий P, для целей этого подпункта. Если P присваивается значение выражения указателя E, которое основано на другом объекте ограниченного указателя P2, связанном с блоком B2, то либо выполнение B2 должно начинаться до выполнения B, либо выполнение B2 должно заканчиваться до назначение. Если эти требования не выполняются, то поведение не определено.

Как и всем остальным, мне трудно понять все тонкости этого определения. В качестве ответа на этот вопрос яХотелось бы увидеть множество хороших примеров для каждого требования в 4-м абзаце об использовании, которое будет нарушать это требование. Эта статья:

http://web.archive.org/web/20120225055041/http://developers.sun.com/solaris/articles/cc_restrict.html

делает хорошую работу представления правил с точки зрения "компилятор может предположить ... »; Расширение этого паттерна и связывание предположений, которые может сделать компилятор, и того, как они не выдерживают, с каждым примером было бы замечательно.

Ответы на вопрос(1)

Ваш ответ на вопрос