Partager via


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

Voir aussi

/std (Spécifier la version du standard du langage)