我很难理解restrict
调用具有已经受限变量的函数的含义。
维基百科告诉我:
限制关键字是程序员给编译器的意图声明。它表示在指针的生命周期内,只有它或直接从它派生的值(例如指针 + 1)将用于访问它指向的对象。
我有这三个示例函数:
void a(int const *p1, int const *p2) {
...
}
void b(int *restrict p1, int *restrict p2) {
...
}
void c(int *p1, int *p2) {
...
}
我会从一个函数中调用它们
foo(int *restrict p1, int *restrict p2) {
a(p1, p2);
b(p1, p2);
c(p1, p1+1);
}
他们中的哪一个会遵守函数声明所做的restrict
承诺?foo
这三种情况是:
函数
a
不会修改任何东西,所以肯定会成立。怎么样
b
,它的参数是从foo
' 指针“直接派生”的吗?foo
如果我修改p1
orp2
in ,我是否会打破我在声明中做出的承诺b
?如果参数没有以任何方式受到限制,情况是否会从以前的情况发生变化
c
,并且我编辑例如 p2 inc
?