Share via


typeof, __typeof__ (C23)

Nouveauté de la norme C23, l’opérateur typeof est un opérateur unaire qui retourne le type d’une expression. 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__ mot clé est une extension spécifique à Microsoft qui fournit les mêmes fonctionnalités que typeof. Le __typeof__ mot clé diffère uniquement typeof 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__.

Syntaxe de typeof

typeof(type)
typeof(constant-expression)
__typeof__(constant-expression)

Exemple typeof

Cet exemple utilise typeof(), mais le comportement est le même si vous utilisez __typeof__.

// Compile with /std:clatest

#include <stdio.h>

double func()
{
    3.14;
}

#define POINTER(T) typeof(T*)

int main()
{
    auto a = func(); // the type for a (double) is inferred, but requires initialization at point of declaration
    typeof(func()) b; // the type for b is double, but didn't have to be initialized at point of declaration

    // Some declarations using typeof
    POINTER(int) p1 = NULL; // p1 is int*

    typeof(double(void))* pFunc = func; // pFunc is a pointer to a function that takes no arguments and returns a double
    printf("pFunc() returns %f\n", pFunc());

    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, compiler avec /std:clatest.

Voir aussi

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