¿Qué significa esta declaración C?

1 minuto de lectura

Me encontré con esta línea:

void (*(*x)(void (*[10])(int *)))(int *)

¿Alguien puede decirme qué es?

  • ¿Esto es un cuestionario o algo así? 🙂

    – Desarrollo fallido

    23 de noviembre de 2011 a las 21:46

  • Esa es fácil de responder: es un desastre.

    – Jerry Ataúd

    23 de noviembre de 2011 a las 21:46

  • la respuesta es siempre cdecl.org.

    – Matt K.

    23 de noviembre de 2011 a las 21:46


  • @mkb: “declarar x como puntero a función (matriz 10 de puntero a función (puntero a int) devolviendo vacío) devolviendo puntero a función (puntero a int) devolviendo vacío” – bueno eso lo aclara

    – Blue Raja – Danny Pflughoeft

    23 de noviembre de 2011 a las 21:48

  • Por favor, dime que no encontraste esto en un código real que realmente se usa de alguna manera en alguna parte… sino en una entrada de un concurso ofuscado de algún tipo posiblemente :)?

    – ScarletAmaranto

    23 de noviembre de 2011 a las 21:49

avatar de usuario
Jesse bueno

Para desglosarlo usted mismo, comience desde los paréntesis más internos y trabaje hasta salir.

  1. (*[10]) <---- Matriz de 10 punteros
  2. (*[10])(int *) <------ Matriz de 10 punteros a funciones que tiene un puntero a int como su argumento
  3. (void (*[10])(int *)) <------ Matriz de 10 punteros a funciones que tiene un puntero a int como su argumento y devuelve void
  4. (*x)(void (*[10])(int *)) <------- x es un puntero a una función que tiene como argumento (una matriz de 10 punteros a funciones que tiene un puntero a int como argumento y devuelve void)

…..

Me detuve a la mitad, pero espero que eso ayude.

avatar de usuario
Seth Carnegie

cdecl es muy útil para este tipo de cosas. Dice:

declarar x como puntero a función (matriz 10 de puntero a función (puntero a int) devolviendo vacío) devolviendo puntero a función (puntero a int) devolviendo vacío

avatar de usuario
alexey frunze

Puedes encontrar explicaciones aquí:

  • @Shahbaz: ¿Qué tiene de gracioso?

    – Alexei Frunze

    23 de noviembre de 2011 a las 22:30

  • Quiero decir divertido como lo disfruté, por eso obtuviste el +1

    – Shahbaz

    23 de noviembre de 2011 a las 22:35

  • ¡Nunca vi las declaraciones como una espiral!

    – Shahbaz

    23 de noviembre de 2011 a las 22:35

  • @Shahbaz: Tampoco se me había ocurrido hasta que vi un artículo (tercer enlace) al respecto. No es tan complejo. Intrincado (nunca mejor dicho) y contrario a la intuición, sí.

    – Alexei Frunze

    23 de noviembre de 2011 a las 22:39

  • @deathly809 luego arréglalo.

    – Alexei Frunze

    15 de agosto de 2014 a las 8:40

Un puntero a una función que tiene una matriz de 10 punteros a funciones que tienen argumento int * y tipo de retorno void como argumento, y devuelve un puntero a una función que tiene argumento int * y tipo de retorno void.

Fuente

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad