如何限制 C 中的数组参数(而不使它们成为指针)?

问题描述 投票:0回答:1

动机

数组参数可以互相别名,编译器必须仔细考虑这种可能性。因此,例如: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 语言做到这一点?如果我不能——那是为什么?

arrays c pointers parameter-passing restrict
1个回答
1
投票

您可以将限定符放在参数的最左边的数组声明中(即转换为指针的部分):

int foo(int a[restrict 10], int b[restrict 10]) {
    a[0] += b[0];
    return a[0] + b[0];
}
© www.soinside.com 2019 - 2024. All rights reserved.