typeof_unqual
, __typeof_unqual__
(C23)
Novo no padrão C23, o typeof_unqual
operador é um operador unário que retorna o tipo de uma expressão após descartar qualificadores como const
, volatile
e restrict
. Ele pode ser usado em declarações de tipo, casts de tipo, verificações de tipo e assim por diante. Ele obtém o tipo de uma variável, função ou qualquer expressão C.
A __typeof_unqual__
palavra-chave é uma extensão específica da Microsoft que fornece a mesma funcionalidade que typeof_unqual
o . A __typeof_unqual__
palavra-chave difere apenas typeof_unqual
por estar disponível durante a compilação para todas as versões do C (não apenas /std:clatest
), e pode facilitar a portabilidade de código entre outros compiladores que suportam __typeof_unqual__
.
Sintaxe de typeof_unqual
typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)
Exemplo do typeof_unqual
Este exemplo usa typeof_unqual()
, mas o comportamento é o mesmo se você usar __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;
}
Requisitos
Requer o Visual Studio 17.9 ou posterior ou cl.exe
versão 19.39.33428 ou posterior.
Para usar typeof_unqual
o , compile com /std:clatest
o .