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

Die __typeof_unqual__ Schlüsselwort (keyword) ist eine microsoftspezifische Erweiterung, die die gleiche Funktionalität bietet wie typeof_unqual. Die __typeof_unqual__ Schlüsselwort (keyword) unterscheidet sich nur davontypeof_unqual, dass sie bei der Kompilierung für alle C-Versionen (nicht nur/std:clatest) verfügbar ist, und es kann das Portieren von Code zwischen anderen Compilern vereinfachen, 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.

Weitere Informationen

/std (Standardversion für die Sprache festlegen)