Pregunta

que estoy haciendo ahora algo de código y de algunos problemas usando restringir la palabra clave.

typedef int* pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}

¿Qué pasa si quiero hacer a y b restringido? El código de abajo fallado:

typedef int* pt;

int foo(pt restrict a, pt restrict b)
{
 ... /* stuff */
}

Gracias de antemano.

¿Fue útil?

Solución

Se necesita un "puntero restringido al número entero" int * restrict p no un "puntero al número entero restringido" restrict int *p por lo que tendrá que hacer otro typedef. No se puede "dentro de alcance" la original.

EDIT: Si bien es cierto que no puede alcance dentro de la typedef y el modificador se aplique siempre en el nivel superior, en este caso resulta que desea el restrict en el nivel superior. Es la inversa de lo que la gente suele topan con const: medios typedef char *char_ptr const char_ptr (o char_ptr const, son equivalentes) ambos significan "puntero constante a char" no "puntero a Char constante" que es lo que la gente quiere. (Véase también este hilo SO: C ++ typedef interpretación de punteros const )

Así que en este caso creo que typedef int *pt sí significa que los medios restrict pt int * restrict pt. Es bastante fácil de verificar porque gcc se quejará de "uso inválido de 'restringir'" para restrict int *x pero no para restrict pt x.

Otros consejos

Asegúrese de que está utilizando la compilación la bandera C99 para su compilador. La palabra clave restrict no existe en C89 C.

Tener una mirada rápida y leyendo esto similar SO pregunta , el código sería, como la palabra clave 'restringir' no es la palabra clave reservada en los compiladores de C ++, como lo indica la respuesta aceptada en el Linky anteriormente, ya sea __restrict o __restricted__, de nuevo, compruebe su compilador ...

typedef int* __restrict pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top