Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
__restrictsolo es válida en variables y solo__declspec (restrict)es válido en declaraciones de función y definiciones.__restrictes similar arestrictpara C a partir de C99 y disponible en/std:c11modo o/std:c17, pero__restrictse 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__restricta 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 claverestrictdel 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;
};