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
__restrict
Schlüsselwort ist nur für Variablen gültig und__declspec (restrict)
gilt nur für Funktionsdeklarationen und Definitionen.__restrict
ist vergleichbarrestrict
mit C ab C99 und ist im/std:c11
oder/std:c17
Modus verfügbar, kann aber__restrict
sowohl in C++- als auch in C-Programmen verwendet werden.Wenn
__restrict
der Compiler verwendet wird, wird die No-Alias-Eigenschaft einer Variablen nicht weitergegeben. Wenn Sie einer Nichtvariablen__restrict
eine__restrict
Variable 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;
};