Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

317
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!