Domanda

che sto facendo un po 'di codice ora, ma ho qualche problema usando limitare parola chiave.

typedef int* pt;

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

Che cosa succede se voglio fare A e B limitato? Il codice qui sotto non è riuscito:

typedef int* pt;

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

Grazie in anticipo.

È stato utile?

Soluzione

Hai bisogno di un "puntatore limitato al numero intero" Non int * restrict p un "puntatore a intero ristretta" restrict int *p quindi sarà necessario fare un altro typedef. Non è possibile "portata dentro" quella originale.

EDIT: Anche se è vero che si non possono portata all'interno del typedef e il modificatore sarà sempre applicare al livello più alto, in questo caso, si scopre che si volete l'restrict al livello superiore. E 'l'inverso di ciò che la gente di solito incontrano con const: mezzi typedef char *char_ptr const char_ptr (o char_ptr const, sono equivalenti) sia media "costante puntatore a char" non "puntatore a costante char" che è quello che la gente vuole. (Si veda anche questa discussione SO: C ++ typedef interpretazione dei puntatori const )

Quindi, in questo caso credo che typedef int *pt significa che i mezzi restrict pt int * restrict pt. E 'abbastanza facile verificare perché gcc si lamenta "l'uso non valido di 'limitare'" per restrict int *x, ma non per restrict pt x.

Altri suggerimenti

Assicurati di compilarlo usando il flag C99 per il vostro compilatore. La parola chiave restrict non esiste in C89 C.

Avere una rapida occhiata e la lettura di questo simile domanda SO , il codice sarebbe, come la parola chiave 'limitare' non è parola chiave riservata in compilatori C ++, come indicato dalla risposta accettata nella linky sopra, sia __restrict o __restricted__, ancora una volta, controllare il compilatore ...

typedef int* __restrict pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top