Partager via


__restrict

Comme le __declspec modificateur ( restrict ) modificateur, le __restrict mot clé (deux traits de soulignement principaux '_') indique qu’un symbole n’est pas alias dans l’étendue actuelle. Le __restrict mot clé diffère du __declspec (restrict) modificateur de la manière suivante :

  • Le __restrict mot clé est valide uniquement sur les variables et __declspec (restrict) n’est valide que sur les déclarations de fonction et les définitions.

  • __restrict est similaire à restrict C à partir de C99 et disponible en /std:c11 mode, /std:c17 mais __restrict peut être utilisé dans les programmes C++ et C.

  • Lorsqu’il __restrict est utilisé, le compilateur ne propage pas la propriété no-alias d’une variable. Autrement dit, si vous affectez une __restrict variable à une variable non-variable__restrict , le compilateur autorise toujours l’alias de la variable non-__restrict. Cela diffère du comportement du mot clé de langage restrict C99 C.

En règle générale, si vous souhaitez affecter le comportement d’une fonction entière, utilisez __declspec (restrict) plutôt que le mot clé.

Pour la compatibilité avec les versions précédentes, _restrict est un synonyme de __restrict, sauf si l’option du compilateur /Za (Désactiver les extensions de langage) est spécifiée.

Dans Visual Studio 2015 et versions ultérieures, __restrict vous pouvez utiliser des références C++.

Remarque

Lorsqu’elle est utilisée sur une variable qui a également le volatile mot clé, volatile elle 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

Mots clés