Compartir vía


__restrict

Al igual que el modificador __declspec ( restrict ), la __restrict palabra clave (dos caracteres de subrayado iniciales "_") indica que un símbolo no está con alias en el ámbito actual. La palabra clave __restrict difiere del modificador __declspec (restrict) en lo siguiente:

  • La palabra clave __restrict solo es válida en variables y solo __declspec (restrict) es válido en declaraciones de función y definiciones.

  • __restrict es similar a restrict para C a partir de C99 y disponible en /std:c11 modo o /std:c17, pero __restrict se puede usar en programas de C++ y C.

  • Cuando se utiliza __restrict, el compilador no propagará la propiedad sin alias de una variable. Es decir, si se asigna una variable __restrict a una variable que no es __restrict, el compilador seguirá permitiendo que la variable que no es __restrict tenga un alias. Este comportamiento es diferente del de la palabra clave restrict del lenguaje C C99.

Normalmente, si se modifica el comportamiento de una función completa, es mejor usar __declspec (restrict) que la palabra clave.

A efectos de compatibilidad con versiones anteriores, _restrict es un sinónimo de __restrict a menos que se especifique la opción del compilador /Za (Deshabilitar extensiones de lenguaje).

En Visual Studio 2015 y versiones posteriores, se puede usar __restrict en las referencias de C++.

Nota:

Cuando se utiliza en una variable que tiene también la palabra clave volatile, volatile tendrá prioridad.

Ejemplo

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

Vea también

Palabras clave