Подробное, но читабельное объяснение ограничительного квалификатора?

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

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

Поэтому мой вопрос таков: может ли кто-нибудь предоставить понятное и понятное объяснение деталей об ограниченных указателях, например, когда я могу и не могу их использовать, когда это UB и т. Д. Чем больше слов, тем лучше. Я устал от того, что у меня болит голова, глядя на сквозняк C99.

Благодарю.

1 ответ

Вот выдержка из: http://en.wikipedia.org/wiki/Restrict

относительно модификатора restrict

"В языке программирования C, как и в стандарте C99, restrict - это ключевое слово, которое можно использовать в объявлениях указателя. Ключевое слово restrict - это объявление намерения, данное программистом компилятору. Оно говорит, что для времени жизни указателя только оно или значение, непосредственно полученное из него (например, указатель + 1), будет использоваться для доступа к объекту, на который он указывает. Это ограничивает эффекты наложения алиасов на указатели, помогая оптимизации. Если декларация намерения не соблюдается, и доступ к объекту осуществляется независимым указателем, что приведет к неопределенному поведению. Использование ключевого слова restrict в C, в принципе, позволяет не тупому C добиться той же производительности, что и та же программа, написанная на Fortran.[1]"

Другие вопросы по тегам