2011-11-23 5 views
22

je suis tombé sur cette ligne:Que signifie cette déclaration C?

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

Quelqu'un peut-il me dire ce qu'il est?

+2

Est-ce un jeu-questionnaire ou quelque chose? :) – FailedDev

+25

Il est facile de répondre: c'est un gâchis. –

+22

La réponse est toujours http://www.cdecl.org. – mkb

Répondre

41

Pour décomposer vous, début à partir de la plupart des parenthèses et travaillez votre chemin.

  1. (*[10]) < ---- tableau de pointeurs 10
  2. (*[10])(int *) < ------ tableau de 10 pointeurs de fonctions qui a un pointeur vers int comme argument
  3. (void (*[10])(int *)) < --- --- tableau de 10 pointeurs de fonctions qui a un pointeur vers int comme argument et retourne void
  4. (*x)(void (*[10])(int *)) < ------- x est un pointeur vers un fu nction qui a comme argument (un tableau de pointeurs de fonctions 10 qui a un pointeur vers int comme argument et renvoie void)

.....

je me suis arrêté à mi-chemin à travers, mais nous espérons que aide.

+0

Je voudrais upvote ceci si j'avais plus de votes à utiliser aujourd'hui. –

+0

J'irais chercher du café si je n'avais pas eu de tasse récemment. –

3

Un pointeur vers une fonction qui comporte un réseau de 10 pointeurs de fonctions qui a int * arguments et retourner type void comme argument, et retourne un pointeur vers une fonction qui a int * argument et le type de retour vide.

Source

+0

La question ultime est, comment feriez-vous de comprendre cela, si vous n'aviez pas cela? –

+1

@TonyTheLion, non les questions pourquoi quelqu'un écrirait une telle chose sans la décomposer en plus petits morceaux? –

9

cdecl est très utile pour ce genre de chose. Il dit:

déclare x comme pointeur à la fonction (tableau 10 de pointeur vers une fonction (pointeur vers int) retour void) pointeur retourner à la fonction (pointeur vers int) renvoyant void