动机
数组参数可以互为别名,编译器必须小心考虑这种可能性。例如:GodBolt
int foo(int a[10], int b[10]) {
a[0] += b[0];
return a[0] + b[0];
}
int bar(int *a, int *b) {
a[0] += b[0];
return a[0] + b[0];
}
int baz(int * __restrict a, int * __restrict b) {
a[0] += b[0];
return a[0] + b[0];
}
的编译代码foo()
必须与 的类似bar()
,而不是 的类似baz()
。
问题
我想在我的函数中使用数组参数 - 甚至可能是多维数组(不是指针数组;那种用一对方括号声明并衰减为指向第一个元素的简单一级指针的数组)。我还想让编译器假定没有别名,即我想将我的数组参数标记为restrict
'ed。
我怎样才能用 C 语言做到这一点?如果我不能做到这一点 - 那是什么原因?
您可以将限定符放在参数最左边的数组声明中(即转换为指针的部分):