__restrict
Wie der Modifizierer restrict __declspec gibt das __restrict-Schlüsselwort an, dass ein Symbol im aktuellen Gültigkeitsbereich nicht mit einem Alias versehen ist. Das Schlüsselwort __restrict unterscheidet sich vom restrict __declspec-Modifizierer folgendermaßen:
Das Schlüsselwort __restrict ist nur auf Variablen gültig, und __declspec(restrict) ist nur bei Funktionsdeklarationen und -definitionen gültig.
Wenn __restrict verwendet wird, gibt der Compiler die Kein-Alias-Eigenschaft einer Variablen nicht weiter. Das bedeutet, dass, wenn Sie eine __restrict-Variable zu einer Nicht-__restrict-Variable zuweisen, impliziert der Compiler nicht, dass die Nicht-__restrict-Variable nicht mit einem Alias versehen ist. Dies unterscheidet sich vom Verhalten des restrict-Schlüsselworts der Spezifikation C99.
Wenn Sie das Verhalten einer vollständigen Funktion beeinflussen, ist es im Allgemeinen besser, __declspec anstatt das Schlüsselwort zu verwenden.
__restrict ähnelt restrict aus der Spezifikation C99, __restrict kann jedoch in C++- oder C-Programmen verwendet werden.
Es gibt keine Unterstützung für __restrict auf C++-Verweisen.
Hinweis
Bei Verwendung auf einer Variablen, die auch das volatile (C++)-Schlüsselwort aufweist, hat volatile Vorrang.
Beispiel
// __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;
};