Поделиться через


typeof, __typeof__ (C23)

Новый в стандарте C23 оператор является унарным оператором, typeof который возвращает тип выражения. Его можно использовать в объявлениях типов, приведения типов, проверки типов и т. д. Он получает тип переменной, функции или любого выражения C.

Ключевое __typeof__ слово — это расширение, определенное корпорацией Майкрософт, которое предоставляет те же функции, что typeofи . Ключевое __typeof__ слово отличается только от typeof того, что оно доступно при компиляции для всех версий C (а не только /std:clatest) и может упростить перенос кода между другими компиляторами, которые поддерживают __typeof__.

Синтаксис typeof

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

Пример typeof

В этом примере используется typeof(), но поведение совпадает с тем __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;
}

Требования

Требуется Visual Studio 17.9 или более поздней версии или cl.exe версии 19.39.33428 или более поздней. Для использования typeofкомпилируйте с /std:clatestпомощью .

См. также

/std (определение стандартной версии языка)