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