Насколько я понимаю, формальное определение "restrict" в разделе 6.7.3.1 C стандарта , в функции ниже указатель y
основан на указателе restrict
x
; следовательно, компилятор будет предполагать, что обращения *x
и *y
могут иметь псевдоним:
void assign1(int *pA, long N) {
int *restrict x = pA;
{
int *y = x + N;
*x = *y;
}
}
Однако, что если само y
объявлено restrict
: может ли компилятор предположить, что *x
и *y
никогда не будет псевдонимом?
void assign2(int *pA, long N) {
int *restrict x = pA;
{
int *restrict y = x + N;
*x = *y;
}
}