Enregistrer ça dans /tmp/test.cpp puis: clang++ -Weverything -std=c++11 test.cpp ; ./a.out
donnera ceci:
test.cpp:8:34: warning: generalized initializer lists are incompatible with C++98 [-Wc++98-compat]
std::array<std::string, 5> bar { "azerty", "qsdfgh", "wxcvbn", "poiuyt", "mlkjhg" };
^
test.cpp:8:36: warning: suggest braces around initialization of subobject [-Wmissing-braces]
std::array<std::string, 5> bar { "azerty", "qsdfgh", "wxcvbn", "poiuyt", "mlkjhg" };
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ }
2 warnings generated.
azerty;qsdfgh;wxcvbn;poiuyt;mlkjhg
Les warnings sont vraiment très cons puisque j'ai demandé expressément du C++11, mais passons.
Le plus intéressant, c'est le résultat: "azerty;qsdfgh;wxcvbn;poiuyt;mlkjhg". Je suis curieux de voir un algo, sans goto, qui fasse la même chose sans, au choix:
mettre un if dans la boucle, et donc impact sur les performances (si c'est la boucle principale du programme, c'est dommage...),
dupliquer la partie de code avant le label, et briser le justifié Do Not Repeat Yourself, et augmente la taille du runtime,
créer une fonction qui ne sera appelée que 2 fois (en même temps, ça m'arrive de le faire pour des fonctions appelées une seule fois, certes, histoire de compartimenter le code) et qui nécessitera soit:
de l'inlining, mais ça augmente la taille du runtime
un jump avant le for et à chaque itération (tiens, je viens de penser qu'en fait, c'est pire que le if cette solution là...).
C'est une vraie question: pour ce pattern la, comment faire sans goto? À efficacité maximale, j'entend. Et franchement, cet usage précis je ne le trouve pas sale... je sais plus qui, sur linuxfr me l'a fait découvrir. Au début j'ai essayé de répondre, mais au fur et à mesure je m'apercevais qu'aucun argument ne gagnais.
Du coup, j'ai pas envoyé le message ;)
Comme quoi, le goto, on le critique souvent, mais peut-être que ce qu'on devrait critiquer, ce sont les mauvais usages du goto. Maintenant, on peut dire la même chose des singleton, des template, de l'héritage (surtout l'héritage pour le coup!) voire même des classes. Toutes les techniques sont mauvaises si mal employées, mais ce n'est pas la faute à la technique, juste à son utilisateur.
[^] # Re: Pas sûr que trouver des erreurs/la fiabilité soit si important pour la communauté libre..
Posté par freem . En réponse à la dépêche [code] Trouver les erreurs. Évalué à 8.
Hum... désolé, ça sera du C++, pas envie de me coltiner à la main des vérifs de longueur de chaîne... mais:
Enregistrer ça dans /tmp/test.cpp puis:
clang++ -Weverything -std=c++11 test.cpp ; ./a.outdonnera ceci:
Les warnings sont vraiment très cons puisque j'ai demandé expressément du C++11, mais passons.
Le plus intéressant, c'est le résultat: "azerty;qsdfgh;wxcvbn;poiuyt;mlkjhg". Je suis curieux de voir un algo, sans goto, qui fasse la même chose sans, au choix:
C'est une vraie question: pour ce pattern la, comment faire sans goto? À efficacité maximale, j'entend. Et franchement, cet usage précis je ne le trouve pas sale... je sais plus qui, sur linuxfr me l'a fait découvrir. Au début j'ai essayé de répondre, mais au fur et à mesure je m'apercevais qu'aucun argument ne gagnais.
Du coup, j'ai pas envoyé le message ;)
Comme quoi, le goto, on le critique souvent, mais peut-être que ce qu'on devrait critiquer, ce sont les mauvais usages du goto. Maintenant, on peut dire la même chose des singleton, des template, de l'héritage (surtout l'héritage pour le coup!) voire même des classes. Toutes les techniques sont mauvaises si mal employées, mais ce n'est pas la faute à la technique, juste à son utilisateur.