Partager via


__restrict

Comme le modificateur restrict __declspec, le mot clé __restrict indique qu'un symbole n'a pas d'alias dans la portée actuelle. Le mot clé __restrict diffère du modificateur restrict __declspec sur les points suivants :

  • Le mot clé __restrict est valide uniquement sur des variables, alors que __declspec(restrict) est valide seulement sur des déclarations et des définitions de fonction.

  • Lorsque __restrict est utilisé, le compilateur ne propage pas la propriété anti-alias d'une variable. Autrement dit, si vous assignez une variable __restrict à une variable non-__restrict, le compilateur n'implique pas que la variable non-__restrict sera dépourvue d'alias. Cela diffère du comportement du mot clé restrict défini dans la norme C99.

En général, si vous influez sur le comportement d'une fonction entière, il est préférable d'utiliser __declspec plutôt que le mot clé.

__restrict est similaire à restrict issu de la norme C99, mais __restrict peut être utilisé dans les programmes C et C++.

Il n'existe pas de prise en charge pour __restrict dans les références C++. 

Notes

Lorsqu'il est utilisé sur une variable qui possède également le mot clé volatile (C++), volatile est prioritaire.

Exemple

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

Voir aussi

Référence

Mots clés C++