__restrict

Come il __declspec modificatore ( restrict ) , la __restrict parola chiave (due caratteri di sottolineatura iniziali '_') indica che un simbolo non è aliasato nell'ambito corrente. La __restrict parola chiave differisce dal __declspec (restrict) modificatore nei modi seguenti:

  • La __restrict parola chiave è valida solo per le variabili ed __declspec (restrict) è valida solo per le dichiarazioni e le definizioni di funzione.

  • __restrict è simile a restrict per C a partire da C99 e disponibile in /std:c11 modalità o /std:c17 , ma __restrict può essere usato sia nei programmi C++ che in C.

  • Quando __restrict viene usato, il compilatore non propaga la proprietà no-alias di una variabile. Ciò significa che, se si assegna una __restrict variabile a una variabile non__restrict , il compilatore consentirà comunque l'aliasing della variabile non __restrict. Questo comportamento è diverso dal comportamento della parola chiave del linguaggio restrict C99.

In genere, se si vuole influire sul comportamento di un'intera funzione, usare __declspec (restrict) anziché la parola chiave .

Per la compatibilità con le versioni precedenti, _restrict è un sinonimo di __restrict a meno che non sia specificata l'opzione /Za del compilatore (Disabilita estensioni del linguaggio).

In Visual Studio 2015 e versioni successive è __restrict possibile usare i riferimenti A C++.

Nota

Se usata in una variabile che ha anche la parola chiave , volatile avrà la volatile precedenza.

Esempio

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

Vedi anche

Parole chiave