Freigeben über


__restrict

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 vergleichbar restrict 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üsselworts restrict .

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;
};

Siehe auch

Schlüsselwörter