Share via


typeof, __typeof__ (C23)

Nuevo en el estándar C23, el typeof operador es un operador unario que devuelve el tipo de una expresión. Se puede usar en declaraciones de tipo, conversiones de tipos, comprobaciones de tipos, etc. Obtiene el tipo de una variable, una función o cualquier expresión de C.

La __typeof__ palabra clave es una extensión específica de Microsoft que proporciona la misma funcionalidad typeofque . La __typeof__ palabra clave difiere de typeof solo en que está disponible al compilar para todas las versiones de C (no solo /std:clatest), y puede facilitar la portabilidad del código entre otros compiladores que admiten __typeof__.

Sintaxis de typeof

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

Ejemplo de typeof

En este ejemplo se usa typeof(), pero el comportamiento es el mismo si usa __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;
}

Requisitos

Requiere Visual Studio 17.9 o posterior, o cl.exe la versión 19.39.33428 o posterior. Para usar typeof, compile con /std:clatest.

Consulte también

/std (Especificar la versión estándar del lenguaje)