C limitare con typedef
-
09-10-2019 - |
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.
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 */
}