Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

311
Vistas
¿Cómo puedo pasar el tipo o el valor a _Generic()?

El sizeof incorporado puede tomar un tipo o una expresión y devolverá el valor apropiado.

Me gustaría crear una macro que use expresiones _Generic() para hacer algo similar. En particular, me gustaría poder pasar un nombre de tipo o un valor como parámetro, al igual que sizeof .

Como un ejemplo trivial, puedo hacer algo como esto:

 #define F(x) _Generic((x)+0, int: 1, long: 2)

Eso funciona porque (x)+0 puede ser una expresión aritmética o una conversión de tipos.

  • (1)+0 -> 1+0 -> 1 -> entero: 1
  • (largo)+0 -> 0L -> largo: 2

Pero eso no funciona cuando el tipo es struct Foo .

Podría usar sintaxis literal compuesta, con llaves: (x){0} pero eso falla para valores literales:

  • (largo){0} - funciona
  • (estructura Foo){0} - funciona
  • (1){0} - no tanto. :-(

¿Hay algún horror de sintaxis C retorcido que permita el uso de nombres de tipo o expresiones en una expresión _Generic ?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su idea literal compuesta funcionará si la combina con typeof . Sin embargo, tenga en cuenta que typeof es una extensión del lenguaje GCC C, por lo que es posible que no funcione en todos los compiladores de C.

 #include <stdio.h> typedef struct Foo { int mx; } Foo; #define F(x) _Generic((typeof(x)){0}, \ int: 1, \ long: 2, \ struct Foo: 3) int main() { printf("%d\n", F(0)); // 1 printf("%d\n", F(int)); // 1 printf("%d\n", F((long)0)); // 2 printf("%d\n", F(long)); // 2 printf("%d\n", F((Foo){1})); // 3 printf("%d\n", F(Foo)); // 3 }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda