__restrict
Comme le modificateur de restrict__declspec , le mot clé d' __restrict indique qu'un symbole pas alias dans la portée actuelle.Le mot clé d' __restrict diffère du modificateur d' restrict __declspec des façons suivantes :
Le mot clé d' __restrict est valide uniquement sur les variables, et __declspec(restrict) n'est valide que dans les déclarations de fonction et des définitions.
Lorsque __restrict est utilisé, le compilateur ne sera propagée pas la propriété de ce type alias d'une variable.Autrement dit, si vous assignez une variable d' __restrict à une variable non d'__restrict , le compilateur n'impliquera pas que la variable est possible d'__restrict pas alias.c'est différent du comportement du mot clé d' restrict de la spécification de C99.
En général, si vous assignez le comportement d'une fonction complète, il est préférable d'utiliser __declspec que le mot clé.
__restrict est semblable à restrict de la spécification de C99, mais __restrict peut être utilisé dans des programmes C ou C++.
Il n'existe aucune prise en charge d' __restrict sur les références C++.
[!REMARQUE]
Lorsque utilisé sur une variable qui a également le mot clé volatile, volatile est prioritaire.
Exemple
// __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;
};