• [^] # Re: Parsing en C

    Posté par . En réponse au message L'opérateur unaire * me laisse perplexe (pointeurs sur fonctions principalement). Évalué à 0.

    J'ai relu une bonne dizaines de fois, et j'ai à peu près tout compris ! Merci beaucoup.

    Cependant, il y a encore des choses qui m'échappent. Tu dis « Tu poses (éventuellement) un identifiant »
    Ne pas mettre l'identifiant sert à donner le type de retours d'une fonction par exemple ?
    dans l'exemple

    int f(int)(void);
    
    

    on peut dire que le retour de f est de type int (void) ? Par exemple, imaginons une fonction qui retourne un pointeur vers une fonction int (g)(void) mais sous forme d'un pointeur (void *) comme le ferait un thread par exemple, il est possible de caster ce pointeur avec ( int ()(void) ) ?

    Pour ma question, sur la représentation en mémoire du tableau. Si je compile ce bout de code

    typedef double f1(int,int);
    typedef void f2(void);
    typedef int (*f3)(int);
    typedef void (*f4)(void);
    void main(void){
    printf("taille pointeurs sur fonctions = %d,%d fonctions = %d,%d\n",sizeof(f3),sizeof(f4),sizeof(f1),sizeof(f2));
    }
    
    

    Je trouve que les pointeurs vers des fonctions font 4 octets (quelle qu'elles soient), et que les fonctions n'en font qu'un (d'ailleurs, on est limité à 256 types de fonctions ?) j'ai l'impression d'être complètement à coté de la plaque. Je crois qu'il faut vraiment que j'apprenne des bases d'assembleur.

    Please do not feed the trolls