typeof__typeof__ (C23)

C23 标准中的新增功能是返回表达式类型的一元运算符,typeof 运算符。 它可用于类型声明、类型强制转换、类型检查等。 它获取变量、函数或任何 C 表达式的类型。

__typeof__ 关键字是特定于 Microsoft 的扩展,提供的功能与 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(指定语言标准版本)