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 avoir ignoré des qualificateurs tels que const
, volatile
et restrict
. Il peut être utilisé dans les déclarations de type, les casts de type, les vérifications 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
.