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 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__
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
.