typeof_unqual, __typeof_unqual__ (C23)

Nowy w standardzie typeof_unqual C23 operator jest operatorem jednoargumentowym, który zwraca typ wyrażenia po odrzuceniu kwalifikatorów, takich jak const, volatilei restrict. Można go używać w deklaracjach typów, rzutach typu, kontrolach typów itd. Pobiera typ zmiennej, funkcji lub dowolnego wyrażenia języka C.

Słowo __typeof_unqual__ kluczowe to rozszerzenie specyficzne dla firmy Microsoft, które zapewnia takie same funkcje jak typeof_unqual. Słowo __typeof_unqual__ kluczowe różni się tylko od typeof_unqual tego, że jest dostępne podczas kompilowania dla wszystkich wersji języka C (nie tylko /std:clatest), i może ułatwić przenoszenie kodu między innymi kompilatorami obsługującymi __typeof_unqual__program .

Składnia aparatu typeof_unqual

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

typeof_unqual Przykład

W tym przykładzie użyto typeof_unqual()metody , ale zachowanie jest takie samo, jeśli używasz polecenia __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;
}

Wymagania

Wymaga programu Visual Studio 17.9 lub nowszego albo cl.exe w wersji 19.39.33428 lub nowszej. Aby użyć polecenia , skompiluj za pomocą typeof_unqual/std:clatestpolecenia .

Zobacz też

/std (Określ wersję standardową języka)