• [^] # Re: Havoc Pennington se pose des questions sur les langages du libre

    Posté par . En réponse à la dépêche Havoc Pennington se pose des questions sur les langages du libre. Évalué à 1.

    > void *f( int a ); -> f renvoie un void * ou f est un pointeur de fonction ?

    C'est une déclaration de fonction qui retourne un (void *) et attend un int en paramètre.
    Le problème ici c'est qu'il n'est pas obligatoire d'utiliser extern comme pour les variable pour lever l'ambiguïté.
    Ainsi :
    int i ; <= définition
    extern int i ; <= déclaration
    void *f(int a) ; <= déclaration
    extern void *f(int a) ; <= toujours déclaration
    de plus les fontions ont un traitement particulier :
    void * (*t)(int) = f ;
    void * (*u)(int) = &f ;
    t(10) ;
    u(10) ;
    Les deux marches.
    Il n'y a pas de variables fonction mais que des pointeurs de fonction. Une définition de fonction est toujours une définition d'un pointeur de fonction (c'est bizarre). Donc il faudrait écrire *t(10). Mais ça ne marche pas car c'est considéré comme le déréférencement d'un (void *). En même temps c'est normal sinon on pourrait faire un "sizeof(f)" qui retournerait la taille de la fonction (ce qui n'a pas vraiment sens...)

    Conclusion, c'est un peu le merdier pour les fonctions... Pour le reste, c'est assez claire.
    Le C++ apporte beaucoup d'amélioration et même ou sous-ensemble C.

    > Et des que tu rajoutes les typedef, les macros et les objets, c'est une horreur sans nom.

    Le C++ permet d'éviter les typedef et les macros.

    > permer d'analyser et de modifier un programme via un autre programme.

    C'est la même horreur que les macros !