typeof_unqual
, __typeof_unqual__
(C23)
Nouveauté de la norme C23, l’opérateur typeof_unqual
est un opérateur unaire qui retourne le type d’une expression après la dis carte alificateurs tels que const
, volatile
et restrict
. Il peut être utilisé dans les déclarations de type, les casts de type, les case activée s de type, et ainsi de suite. Il obtient le type d’une variable, d’une fonction ou d’une expression C.
Le __typeof_unqual__
mot clé est une extension spécifique à Microsoft qui fournit les mêmes fonctionnalités que typeof_unqual
. Le __typeof_unqual__
mot clé diffère uniquement typeof_unqual
du fait qu’il est disponible lors de la compilation pour toutes les versions de C (pas seulement/std:clatest
), et il peut faciliter le portage du code entre d’autres compilateurs qui prennent en charge __typeof_unqual__
.
Syntaxe de typeof_unqual
typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)
Exemple typeof_unqual
Cet exemple utilise typeof_unqual()
, mais le comportement est le même si vous utilisez __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;
}
Spécifications
Nécessite Visual Studio 17.9 ou version ultérieure, ou cl.exe
version 19.39.33428 ou ultérieure.
Pour utiliser typeof_unqual
, compiler avec /std:clatest
.