Is it legal to assign a restricted pointer to another pointer, and use the second pointer to modify the value?

旧街凉风 提交于 2019-11-30 09:05:17

问题


Does the following method respect the "restrict" contract?

void fun(int* restrict foo) {
     int* bar = foo + 32;
     for (int i = 0; i < 32; ++i)
         *bar = 0;
}

My guess is no, but I need some clarification.


回答1:


Yes, it sure respects the contract.

6.7.3 Type qualifiers

8 An object that is accessed through a restrict-qualified pointer has a special association with that pointer. This association, defined in 6.7.3.1 below, requires that all accesses to that object use, directly or indirectly, the value of that particular pointer.135) The intended use of the restrict qualifier (like the register storage class) is to promote optimization, and deleting all instances of the qualifier from all preprocessing translation units composing a conforming program does not change its meaning (i.e., observable behavior).

In short, at the point foo is defined (the function-call), foo is guaranteed by the programmer to be the only way to refer to the objects (if any) it points to.
All other expressions referring to those object must thus be derived from that pointers value (like bar which is set to foo+32).
Breaking faith is, as always in such cases, duly punished by undefined behavior.



来源:https://stackoverflow.com/questions/26567078/is-it-legal-to-assign-a-restricted-pointer-to-another-pointer-and-use-the-secon

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!