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
помощью .
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по