Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wie der __declspec ( restrict ) Modifizierer gibt das __restrict Schlüsselwort (zwei führende Unterstriche '_' ) an, dass ein Symbol nicht im aktuellen Bereich aliast ist. Das __restrict Schlüsselwort unterscheidet sich von dem __declspec (restrict) Modifizierer auf folgende Weise:
Das
__restrictSchlüsselwort ist nur für Variablen gültig und__declspec (restrict)gilt nur für Funktionsdeklarationen und Definitionen.__restrictist vergleichbarrestrictmit C ab C99 und ist im/std:c11oder/std:c17Modus verfügbar, kann aber__restrictsowohl in C++- als auch in C-Programmen verwendet werden.Wenn
__restrictder Compiler verwendet wird, wird die No-Alias-Eigenschaft einer Variablen nicht weitergegeben. Wenn Sie einer Nichtvariablen__restricteine__restrictVariable zuweisen, lässt der Compiler weiterhin zu, dass die Variable ohne __restrict aliasiert wird. Dies unterscheidet sich vom Verhalten des C99 C-Sprachschlüsselwortsrestrict.
Wenn Sie das Verhalten einer gesamten Funktion beeinflussen möchten, verwenden __declspec (restrict) Sie im Allgemeinen anstelle des Schlüsselworts.
Aus Gründen der Kompatibilität mit früheren Versionen ist _restrict ein Synonym für __restrict, es sei denn, die Compileroption /Za (Spracherweiterungen deaktivieren) ist angegeben.
In Visual Studio 2015 und höher __restrict können sie für C++-Verweise verwendet werden.
Hinweis
Wenn sie für eine Variable mit dem volatile Schlüsselwort verwendet wird, volatile hat dies 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;
};