__restrict
Wie der Modifizierer restrict __declspec gibt das __restrict-Schlüsselwort an, dass ein Symbol nicht im aktuellen Bereich einen Alias besitzt.Das __restrict-Schlüsselwort unterscheidet sich vom restrict __declspec-Modifizierer in folgender Weise:
Das __restrict-Schlüsselwort ist nur für Variablen gültig, und __declspec(restrict) ist nur auf Funktionsdeklarationen und Definitionen gültig.
Wenn __restrict verwendet wird, gibt der Compiler nicht die NO-ALIAS-Eigenschaft einer Variablen.Das heißt, wenn Sie eine __restrict-Variable zu einer Nicht-__restrict-Variablen zuweisen, bedeutet der Compiler nicht, dass die Nicht-__restrict-Variable nicht mit einem Alias versehene.Dies unterscheidet sich vom Verhalten des restrict-Schlüsselwort aus der C99- W3C-Spezifikation unterscheidet.
Im Allgemeinen wenn Sie das Verhalten einer kompletten Funktion auswirken, empfiehlt es sich, als __declspec das Schlüsselwort zu verwenden.
__restrict ist mit restrict aus der C99- Spezifikation, aber __restrict kann in C++- oder C-Programmen verwendet werden.
Es gibt keine Unterstützung für __restrict mit C++-Verweisen.
Hinweis |
---|
Wenn es für eine Variable verwendet wird, die flüchtig (C++) auch das Schlüsselwort aufweist, hat Vorrang volatile . |
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;
};