Es gibt eine Stack Exchange-Site namens Programming Puzzles & Code Golf . Die Programmierpuzzles auf dieser Site passen zu dieser Definition von Puzzle :
Ein Spielzeug, ein Problem oder eine andere Einrichtung, die amüsieren soll, indem sie Schwierigkeiten aufwirft, die durch Einfallsreichtum oder geduldige Anstrengung gelöst werden können.
Sie sollen amüsieren und nicht so, wie ein arbeitender Programmierer sich über ein reales Problem amüsieren könnte, das bei seiner täglichen Arbeit auftritt.
Code Golf ist "eine Art Freizeit-Computerprogrammierwettbewerb, bei dem die Teilnehmer versuchen, den kürzestmöglichen Quellcode zu erreichen, der einen bestimmten Algorithmus implementiert." In den Antworten auf der PP & CG-Site sehen Sie, wie Personen die Anzahl der Bytes in ihren Antworten angeben. Wenn sie einen Weg finden, ein paar Bytes zu sparen, streichen sie die ursprüngliche Nummer aus und zeichnen die neue auf.
Wie zu erwarten ist, belohnt Code-Golf extremen Missbrauch von Programmiersprachen. Ein-Buchstaben-Variablennamen. Kein Leerzeichen. Kreative Nutzung von Bibliotheksfunktionen. Undokumentierte Funktionen. Nicht standardisierte Programmierpraktiken. Schreckliche Hacks.
Wenn ein Programmierer bei der Arbeit eine Pull-Anfrage mit Golf-Code einreichte, wurde diese abgelehnt. Ihre Mitarbeiter würden sie auslachen. Ihr Manager würde an ihrem Schreibtisch vorbeischauen, um sich zu unterhalten. Trotzdem amüsieren sich Programmierer, indem sie Antworten an PP & CG senden.
Was hat das damit zu tun stdc++.h
? Wie andere betont haben, ist die Verwendung faul. Es ist nicht portierbar, sodass Sie nicht wissen, ob es auf Ihrem Compiler oder der nächsten Version Ihres Compilers funktioniert. Es fördert schlechte Gewohnheiten. Es ist nicht Standard, daher kann das Verhalten Ihres Programms von Ihren Erwartungen abweichen. Dies kann die Kompilierungszeit und die Größe der ausführbaren Datei erhöhen.
Dies sind alles gültige und korrekte Einwände. Warum sollte jemand diese Monstrosität nutzen?
Es stellt sich heraus, dass manche Leute gerne Rätsel ohne den Code Golf programmieren . Sie treffen sich und treten bei Veranstaltungen wie ACM-ICPC, Google Code Jam und Facebook Hacker Cup oder auf Websites wie Topcoder und Codeforces an. Ihr Rang basiert auf der Programmkorrektheit, der Ausführungsgeschwindigkeit und der Geschwindigkeit, mit der sie eine Lösung einreichen. Um die Ausführungsgeschwindigkeit zu maximieren, verwenden viele Teilnehmer C ++. Um die Codierungsgeschwindigkeit zu maximieren, verwenden einige von ihnen stdc++.h
.
Ist das eine gute Idee? Lassen Sie uns die Liste der Nachteile überprüfen. Portabilität? Es spielt keine Rolle, da diese Codierungsereignisse eine bestimmte Compilerversion verwenden, die die Teilnehmer im Voraus kennen. Einhaltung von Standards? Nicht relevant für einen Codeblock, dessen Nutzungsdauer weniger als eine Stunde beträgt. Kompilierzeit und ausführbare Größe? Diese sind nicht Teil der Bewertungsrubrik des Wettbewerbs.
Wir haben also schlechte Gewohnheiten. Dies ist ein berechtigter Einwand. Durch die Verwendung dieser Header-Datei vermeiden die Teilnehmer die Möglichkeit zu erfahren, welche Standard-Header-Datei die Funktionalität definiert, die sie in ihrem Programm verwenden. Wenn sie Code aus der realen Welt schreiben (und nicht verwenden stdc++.h
), müssen sie Zeit damit verbringen, diese Informationen nachzuschlagen, was bedeutet, dass sie weniger produktiv sind. Das ist der Nachteil beim Üben stdc++.h
.
Dies wirft die Frage auf, warum es sich überhaupt lohnt, an wettbewerbsorientierten Programmen teilzunehmen, wenn dadurch schlechte Gewohnheiten wie die Verwendung stdc++.h
und Verletzung anderer Codierungsstandards gefördert werden. Eine Antwort ist, dass die Leute dies aus dem gleichen Grund tun, aus dem sie Programme auf PP & CG veröffentlichen: Einige Programmierer finden es angenehm, ihre Codierungsfähigkeiten in einem spielerischen Kontext einzusetzen.
Die Frage, ob verwendet werden soll, stdc++.h
hängt also davon ab, ob die Vorteile der Codierungsgeschwindigkeit bei einem Programmierwettbewerb die schlechten Gewohnheiten überwiegen, die man durch die Verwendung entwickeln könnte.
Diese Frage lautet: "Warum sollte ich nicht # einschließen <bits/stdc++.h>
?" Mir ist klar, dass es gefragt und beantwortet wurde, um einen Punkt zu machen, und die akzeptierte Antwort soll die einzig wahre Antwort auf diese Frage sein. Die Frage lautet jedoch nicht "Warum sollte ich nicht # <bits/stdc++.h>
in den Produktionscode aufnehmen?" Daher halte ich es für sinnvoll, andere Szenarien in Betracht zu ziehen, in denen die Antwort möglicherweise anders ist.
using namespace std;
es irgendwo eine Include-Version von da draußen geben würde.