typeof_unqual__typeof_unqual__ (C23)

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

__typeof_unqual__ 关键字是特定于 Microsoft 的扩展,提供的功能与 typeof_unqual 相同。 __typeof_unqual__ 关键字不同于 typeof_unqual,因为它在所有 C 版本(而不仅仅是 /std:clatest)编译时可用,并且它可能会简化其他支持 __typeof_unqual__ 的编译器之间的代码移植。

typeof_unqual 语法

typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)

typeof_unqual 示例

此示例使用 typeof_unqual(),但如果使用 __typeof_unqual__,则行为相同。

// Compile with /std:clatest and /experimental:c11atomics
#include <stdatomic.h>

// A function that takes an atomic int pointer, but uses a non-atomic copy of the value
void func(_Atomic(int) * pAtomic)
{
    typeof_unqual(*pAtomic) local = *pAtomic;

    // Use local non-atomic copy of value
}

int main()
{
    int* const cpVar1 = 2;
    typeof_unqual(cpVar1) pVar2 = 3;
    pVar2 = 4; // no error because pi is not const. cpVar1 = 4 would be an error.

    _Atomic(int)i = 42;
    func(&i);

    return 0;
}

要求

需要 Visual Studio 17.9,或 cl.exe 19.39.33428 版本或更高版本。 若要使用 typeof_unqual,请使用 /std:clatest 进行编译。

另请参阅

/std(指定语言标准版本)