Jac*_*cko 4 c c99 restrict-qualifier
以下方法是否尊重“限制”合同?
void fun(int* restrict foo) {
int* bar = foo + 32;
for (int i = 0; i < 32; ++i)
*bar = 0;
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是否定的,但我需要澄清一下。
是的,它确实尊重合同。
6.7.3 类型限定符
8 通过
restrict限定指针访问的对象与该指针具有特殊关联。这种关联,在下面的 6.7.3.1 中定义,要求对该对象的所有访问直接或间接使用该特定指针的值。135)限制限定符(如寄存器存储类)的预期用途是促进优化,并且从组成符合程序的所有预处理翻译单元中删除限定符的所有实例不会改变其含义(即,可观察的行为)。
总之,在该点foo被定义(函数调用),foo是由程序员保证是指对象(如果有的话)它指向的唯一途径。
因此,引用这些对象的所有其他表达式都必须从该指针值派生出来(例如bar设置为foo+32)。
与往常一样,在这种情况下,背信弃义会受到未定义行为的适当惩罚。