Array parameters can alias each other, and the compiler must carefully allow for this possibility. Thus, for example: 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];
}
the compiled code for foo()
must be like that of bar()
, not like that of baz()
.
I want to use array parameters to my function - possibly even multi-dimension arrays (not arrays-of-pointers; the kind you declare with a pair of square brackets and decay to simple one-level pointers to the first element). And I also want the compiler to assume there is no aliasing, i.e. I want to mark my array parameters as restrict
'ed.
How can I do this in C? And if I can't - why is that?
You can put qualifiers in the leftmost array declaration of a parameter (i.e. the part that gets converted to a pointer):
int foo(int a[restrict 10], int b[restrict 10]) {
a[0] += b[0];
return a[0] + b[0];
}