Comment fonctionne ce programme «hello world!»?

int main(void) { return('yes', *"no", **main, *********printf) ("hello world!\n") *0; } 

sorties hello world! , mais comment ça marche réellement?

    Deux choses vraiment:

    1. Les pointeurs de fonction ne déréférencent pas les mêmes que les autres pointeurs. *main == main
    2. Une liste séparée par des virgules renvoie la valeur du dernier élément de la liste

    Donc, si nous simplifions les pointeurs:

     int main(void) { return('yes', *"no", main, printf) ("hello world!\n") *0; } 

    Et en utilisant le dernier élément de la liste comme valeur de la liste

     int main(void) { return printf("hello world!\n") *0; } 

    printf renvoie le nombre de caractères imprimés

     int main(void) { return 13 *0; } 

    Et 13 * 0 est laissé comme un exercice pour le lecteur.

     ('yes', *"no", **main, *********printf) 

    sera évalué à *********printf , car l’opérateur de virgule évalue ses opérandes et renvoie la valeur de la dernière expression. *********printf est égal à printf, car le pointeur de fonction de déréférencement entraîne le même pointeur de fonction; ça ne fait rien.

    Ensuite, le résultat de la première parenthèse, printf, est appliqué à (“hello world! \ N”), ce qui entraîne un texte imprimé à l’écran. La fonction printf renvoie le nombre de caractères écrits. Ce nombre est ensuite multiplié par 0 et le produit est renvoyé par la fonction principale.