typeof_unqual
, __typeof_unqual__
(C23)
Novità dello standard C23, l'operatore typeof_unqual
è un operatore unario che restituisce il tipo di un'espressione dopo aver eliminato qualificatori come const
, volatile
e restrict
. Può essere usato nelle dichiarazioni di tipo, nei cast di tipi, nei controlli dei tipi e così via. Ottiene il tipo di una variabile, di una funzione o di un'espressione C.
La __typeof_unqual__
parola chiave è un'estensione specifica di Microsoft che fornisce la stessa funzionalità di typeof_unqual
. La __typeof_unqual__
parola chiave differisce solo dal typeof_unqual
fatto che è disponibile durante la compilazione per tutte le versioni di C (non solo /std:clatest
) e può semplificare la conversione del codice tra altri compilatori che supportano __typeof_unqual__
.
Sintassi typeof_unqual
typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)
typeof_unqual
esempio
In questo esempio viene typeof_unqual()
usato , ma il comportamento è lo stesso se si usa __typeof_unqual__
.
// Compile with /std:clatest and /experimental:c11atomics
#include <stdatomic.h>
// A function that takes an atomic int pointer, but uses a non-atomic copy of the value
void func(_Atomic(int) * pAtomic)
{
typeof_unqual(*pAtomic) local = *pAtomic;
// Use local non-atomic copy of value
}
int main()
{
int* const cpVar1 = 2;
typeof_unqual(cpVar1) pVar2 = 3;
pVar2 = 4; // no error because pi is not const. cpVar1 = 4 would be an error.
_Atomic(int)i = 42;
func(&i);
return 0;
}
Requisiti
Richiede Visual Studio 17.9 o versione successiva o cl.exe
versione 19.39.33428 o successiva.
Per usare typeof_unqual
, compilare con /std:clatest
.