__restrict
Como o modificado restrict __declspec, a palavra-chave __restrict indica que um símbolo não tem um alias no escopo atual. A palavra-chave __restrict difere do modificador restrict __declspec das seguintes maneiras:
A palavra-chave __restrict só é válida em variáveis, e __declspec(restrict) só é válido em declarações e definições de função.
Quando __restrict é usado, o compilador não propaga a propriedade no-alias de uma variável. Isto é, se você atribuir uma variável __restrict a uma variável não __restrict, o compilador não implicará que a variável não __restrict não possui alias. Isso é diferente do comportamento da palavra-chave restrict da especificação C99.
Em geral, se você afeta o comportamento de uma função inteira, é melhor usar __declspec do que a palavra-chave.
__restrict é semelhante a restrict das especificações C99, mas __restrict pode ser usado em programas C ou C++.
Não há suporte para __restrict em referências C++.
Dica
Quando usada em uma variável que também tem a palavra-chave volatile (C++), volatile terá precedência.
Exemplo
// __restrict_keyword.c
// compile with: /LD
// In the following function, declare a and b as disjoint arrays
// but do not have same assurance for c and d.
void sum2(int n, int * __restrict a, int * __restrict b,
int * c, int * d) {
int i;
for (i = 0; i < n; i++) {
a[i] = b[i] + c[i];
c[i] = b[i] + d[i];
}
}
// By marking union members as __restrict, tell compiler that
// only z.x or z.y will be accessed in any given scope.
union z {
int * __restrict x;
double * __restrict y;
};