typeof_unqual
, __typeof_unqual__
(C23)
Новый в стандарте C23 оператор является унарным оператором, typeof_unqual
который возвращает тип выражения после отмены квалификаторов, таких как const
, volatile
и restrict
. Его можно использовать в объявлениях типов, приведения типов, проверки типов и т. д. Он получает тип переменной, функции или любого выражения C.
Ключевое __typeof_unqual__
слово — это расширение, определенное корпорацией Майкрософт, которое предоставляет те же функции, что 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
помощью .