Je perdais ma week-end sur StackOverflow et a vu this challenge dans le Hot Network Questions.Impossible de comprendre ce code de CodeGolf
Contexte
golfeurs Bonjour! Je voudrais apprendre tous les langages de programmation! Mais j'ai un peu une courte durée d'attention ... et copier tous les exemples Bonjour du monde est ennuyeux ... mais je comme le feu!^W^
Défi
Voici donc le plan! Je veux que vous écriviez le plus petit code que va compiler, imprimer Goodbye Cruel World !, et ensuite planter. Ou, en tant que défi de torsion bonus , imprimer Hello World! et s'écraser avec Goodbye Cruel Monde!
En tant qu'étudiant désireux de comprendre entièrement le langage C, je suis très confus lorsqu'ils tombent sur le C answer à ce défi:
main(){puts(puts("Goodbye Cruel World!"));}
Imprime la chaîne et tente ensuite d'utiliser le retour valeur en tant que pointeur à une autre chaîne à imprimer, ce qui provoque une erreur de segmentation.
Merci à puts()
documentation J'ai trouvé que puts()
retourne une valeur non négative sur le succès. Donc, si je comprends bien, cela équivaut à quelque chose comme:
puts(2);
Comment 2
est « un pointeur vers une autre chaîne à imprimer » ??
Plus tard, une amélioration a été ajoutée à cette même réponse:
main(i){i=puts("Goodbye Cruel World!")/0;}
Et cette fois, je suis tout à fait perdu. Donc, i
est pris comme un argument de main, utilisé pour stocker la valeur de retour de puts()
. D'accord. Mais qu'en est-il du \0
? Pourquoi utiliser le caractère NUL-TERMINATOR
là-bas?
Si vous pouviez me alléger s'il vous plaît un peu, il serait très intéressant pour moi de comprendre cela. Aussi, je pense que le titre de la question pourrait être un peu plus précis si reformulé mais je n'ai pas pu mettre en mots mon malentendu.
@Downvoter un indice? – Badda
Rien de tout cela n'est un code C valide et votre compilateur devrait se plaindre pour diverses raisons. Si ce n'est pas le cas, en obtenir un nouveau ou passer à la norme C et activer les avertissements recommandés.Et nous ne sommes pas un service d'explication pour obfuscated == mauvais code. – Olaf
'/ 0' signifie" diviser par zéro " –