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
, volatile
und .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_unqual
Kompilieren Mit /std:clatest
.