Il existe un site Stack Exchange appelé Programming Puzzles & Code Golf . Les puzzles de programmation sur ce site correspondent à cette définition du puzzle :
un jouet, un problème ou un autre dispositif conçu pour amuser en présentant des difficultés à résoudre par l'ingéniosité ou l'effort du patient.
Ils sont conçus pour amuser, et non de la manière dont un programmeur qui travaille pourrait être amusé par un problème du monde réel rencontré dans son travail quotidien.
Code Golf est "un type de compétition de programmation informatique récréative dans laquelle les participants s'efforcent d'obtenir le code source le plus court possible qui implémente un certain algorithme." Dans les réponses sur le site PP&CG, vous verrez des personnes spécifier le nombre d'octets dans leurs réponses. Quand ils trouveront un moyen de raser quelques octets, ils supprimeront le numéro d'origine et enregistreront le nouveau.
Comme vous pouvez vous y attendre, le golf de code récompense les abus extrêmes du langage de programmation. Noms de variables à une lettre. Pas d'espace. Utilisation créative des fonctions de bibliothèque. Fonctionnalités non documentées. Pratiques de programmation non standard. Des hacks épouvantables.
Si un programmeur soumettait une demande de tirage au travail contenant un code de style golf, elle serait rejetée. Leurs collègues se moquaient d'eux. Leur manager passait devant leur bureau pour discuter. Même ainsi, les programmeurs s'amusent en soumettant des réponses à PP&CG.
Qu'est-ce que cela a à voir stdc++.h
? Comme d'autres l'ont souligné, son utilisation est paresseuse. Ce n'est pas portable, donc vous ne savez pas si cela fonctionnera sur votre compilateur ou la prochaine version de votre compilateur. Cela favorise les mauvaises habitudes. Ce n'est pas standard, donc le comportement de votre programme peut différer de ce que vous attendez. Cela peut augmenter le temps de compilation et la taille de l'exécutable.
Ce sont toutes des objections valides et correctes. Alors pourquoi quelqu'un utiliserait-il cette monstruosité?
Il s'avère que certaines personnes aiment programmer des puzzles sans le code golf . Ils se réunissent et participent à des événements comme ACM-ICPC, Google Code Jam et Facebook Hacker Cup, ou sur des sites comme Topcoder et Codeforces. Leur classement est basé sur l'exactitude du programme, la vitesse d'exécution et la vitesse à laquelle ils soumettent une solution. Pour maximiser la vitesse d'exécution, de nombreux participants utilisent C ++. Pour maximiser la vitesse de codage, certains d'entre eux utilisent stdc++.h
.
Est-ce une bonne idée? Vérifions la liste des inconvénients. Portabilité? Cela n'a pas d'importance car ces événements de codage utilisent une version de compilateur spécifique que les candidats connaissent à l'avance. Conformité aux normes? Sans objet pour un bloc de code dont la durée de vie est inférieure à une heure. Temps de compilation et taille exécutable? Ceux-ci ne font pas partie de la rubrique de notation du concours.
Nous nous retrouvons donc avec de mauvaises habitudes. Ceci est une objection valable. En utilisant ce fichier d'en-tête, les candidats évitent de savoir quel fichier d'en-tête standard définit les fonctionnalités qu'ils utilisent dans leur programme. Quand ils écrivent du code du monde réel (et ne l'utilisent pas stdc++.h
), ils devront passer du temps à rechercher ces informations, ce qui signifie qu'ils seront moins productifs. C'est l'inconvénient de pratiquer avec stdc++.h
.
Cela soulève la question de savoir pourquoi cela vaut la peine de participer à une programmation compétitive si elle encourage de mauvaises habitudes comme l'utilisation stdc++.h
et la violation d'autres normes de codage. Une réponse est que les gens le font pour la même raison qu'ils publient des programmes sur PP&CG: certains programmeurs trouvent agréable d'utiliser leurs compétences de codage dans un contexte de jeu.
Ainsi, la question de savoir si utiliser stdc++.h
revient à savoir si les avantages de la vitesse de codage dans un concours de programmation l'emportent sur les mauvaises habitudes que l'on pourrait développer en l'utilisant.
Cette question demande: "Pourquoi ne devrais-je pas #inclure <bits/stdc++.h>
?" Je me rends compte qu'il a été demandé et répondu pour faire un point, et la réponse acceptée est destinée à être la seule vraie réponse à cette question. Mais la question n'est pas "Pourquoi ne devrais-je pas #inclure <bits/stdc++.h>
dans le code de production?" Par conséquent, je pense qu'il est raisonnable d'envisager d'autres scénarios où la réponse peut être différente.
using namespace std;
incluse de quelque part.