typeof_unqual
, __typeof_unqual__
(C23)
Novedad del estándar C23, el typeof_unqual
operador es un operador unario que devuelve el tipo de una expresión después de descartar calificadores como const
, volatile
y restrict
. Se puede usar en declaraciones de tipo, conversiones de tipos, comprobaciones de tipos, etc. Obtiene el tipo de una variable, una función o cualquier expresión de C.
La __typeof_unqual__
palabra clave es una extensión específica de Microsoft que proporciona la misma funcionalidad typeof_unqual
que . La __typeof_unqual__
palabra clave difiere de typeof_unqual
solo en que está disponible al compilar para todas las versiones de C (no solo /std:clatest
), y puede facilitar la portabilidad del código entre otros compiladores que admiten __typeof_unqual__
.
Sintaxis de typeof_unqual
typeof_unqual(type)
typeof_unqual(constant-expression)
__typeof__unqual(constant-expression)
Ejemplo de typeof_unqual
En este ejemplo se usa typeof_unqual()
, pero el comportamiento es el mismo si usa __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
Requiere Visual Studio 17.9 o posterior, o cl.exe
la versión 19.39.33428 o posterior.
Para usar typeof_unqual
, compile con /std:clatest
.