Condividi tramite


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, volatilee 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.

Vedi anche

/std (Specificare la versione standard del linguaggio)