Freigeben über


typeof_unqual, __typeof_unqual__ (C23)

Neu im C23-Standard ist der typeof_unqual Operator ein unärer Operator, der den Typ eines Ausdrucks zurückgibt, nachdem Qualifizierer wie const, volatileund .restrict Sie kann in Typdeklarationen, Typ casts, Typüberprüfungen usw. verwendet werden. Er ruft den Typ einer Variablen, Funktion oder eines beliebigen C-Ausdrucks ab.

Das __typeof_unqual__ Schlüsselwort ist eine microsoftspezifische Erweiterung, die die gleiche Funktionalität wie typeof_unqual. Das __typeof_unqual__ Schlüsselwort unterscheidet sich nur davon typeof_unqual , dass es beim Kompilieren für alle C-Versionen (nicht nur /std:clatest) verfügbar ist, und es kann das Portieren von Code zwischen anderen Compilern erleichtern, die unterstützt __typeof_unqual__werden.

Syntax von typeof_unqual

typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)

typeof_unqual-Beispiel

In diesem Beispiel wird typeof_unqual()verwendet, das Verhalten ist jedoch identisch, wenn Sie es verwenden __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;
}

Anforderungen

Erfordert Visual Studio 17.9 oder höher oder cl.exe Version 19.39.33428 oder höher. typeof_unqualKompilieren Mit /std:clatest.

Siehe auch

/std (Standardversion für die Sprache festlegen)