__restrict

Wie der __declspec ( restrict ) Modifizierer gibt die __restrict Schlüsselwort (keyword) (zwei führende Unterstriche '_' ) an, dass ein Symbol nicht im aktuellen Bereich aliast ist. Die __restrict Schlüsselwort (keyword) unterscheidet sich von dem __declspec (restrict) Modifizierer auf folgende Weise:

  • Die __restrict Schlüsselwort (keyword) 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 der C99 C-Sprache restrict Schlüsselwort (keyword).

Wenn Sie das Verhalten einer gesamten Funktion beeinflussen möchten, verwenden __declspec (restrict) Sie im Allgemeinen anstelle der Schlüsselwort (keyword).

Aus Gründen der Kompatibilität mit früheren Versionen _restrict ist ein Synonym für __restrict die Angabe der Compileroption /Za (Sprachenerweiterungen deaktivieren).

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 (keyword) 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