Es scheint, dass einfache Änderungen an einer C ++ - Datei, insbesondere bei Vorlagen, zu Fehlerseiten führen können. Bei diesem Wettbewerb geht es darum zu sehen, was der größte "Knall des Bocks" ist, dh die ausführlichere Fehlerausgabe mit der geringsten Änderung des Quellcodes (Hinzufügen von 1 Zeichen).
Da andere Sprachen vernünftiger sind, ist dies auf C ++ und gcc Version 4.x beschränkt.
Regeln
Die ursprüngliche Quelldatei muss mit gcc 4.9.2 kompiliert werden, um fehlerfreien Objektcode zu erhalten.
Ein ASCII-Zeichen wird dem Quellcode hinzugefügt, um einen Tippfehler zu erzeugen, wobei die Dateigröße um 1 Byte erhöht wird.
Der Compiler wird mit Standardoptionen ausgeführt. Notwendige Optionen mögen
-c
und-std=c++11
sind erlaubt, Optionen mögen-Wall
nicht.Metrisch ist
number of bytes of generated error messages ----------------------------------------------------------------------- (bytes of source code with typo) (length of filename passed to compiler)
Die Antworten werden mit http://ideone.com/ C ++ 4.9.2 validiert .
Beispiel:
Der Dateiname ist a.cpp
5 Byte lang.
int foo();
Arbeitszusammenstellung
gcc -c a.cpp
Beschädigter Quellcode:
in t foo();
Fehlgeschlagene Kompilierung
$ gcc -c a.cpp
a.cpp:1:1: error: ‘in’ does not name a type
in t foo();
^
$ gcc -c a.cpp |& -c wc
64
$ wc -c a.cpp
12 a.cpp
Ergebnis: 64/12/5 = 1.0666
Besserer Versuch: {
Zwischen Parens von einfügenfoo()
$ gcc -c a.cpp |& wc -c
497
Neue Punktzahl: 497/12/5 = 8,283
Viel Glück!
AKTUALISIEREN
Ich ermutige die Leute, die rekursive Implementierung zu ignorieren. Das gewinnt technisch, ist aber nicht im Sinne des Wettbewerbs.
UPDATE 2
Wie viele Leute bemerkt haben, wäre der Wettbewerb wahrscheinlich interessanter gewesen, wenn der C-Pre-Prozessor nicht zugelassen worden wäre. Daher möchte ich die Leute ermutigen, Lösungen zu veröffentlichen, die überhaupt keine Präprozessor-Befehle verwenden. Das bedeutet, dass überhaupt keine Header-Dateien verwendet werden, da dies #include
nicht zulässig ist!
Soweit Sie IDEONE zur Validierung verwenden, können Sie entweder die IDEONE-Ausgabe direkt verwenden (und den Quellennamen als prog.cpp
), oder Sie können die IDEONE-Ausgabe über ein globales Suchen und Ersetzen ausführen ( s/prog.cpp/a.cc/
zum Beispiel) und so tun, als ob Sie dies könnten Legen Sie den Dateinamen direkt fest.
UPDATE 3
Wie bereits erwähnt, ist Ideone etwas zu restriktiv und erfordert nicht nur die Erstellung von Objektdateien, sondern auch die Verknüpfung. Da dieser Wettbewerb nur zum Spaß dient, seien Sie bitte ehrlich und geben Sie an, mit was Sie Ihre Punktzahl erzielt haben. Verwenden Sie entweder ideone oder die meisten Vanille-Builds (alle Standardeinstellungen) von gcc 4.9.2, wie Sie sie aufbringen können. Der Wettbewerb soll auf die Schrecklichkeit von C ++ - Fehlermeldungen aufmerksam machen.
quelle
Antworten:
gcc 4.5.2, Score: 8579.15 (oder 14367.49 für Dateiname "aC", wird möglicherweise später aktualisiert)
Originaldatei, 29 Bytes, kompiliert sauber (a.cpp):
Geänderte Datei, 30 Bytes:
Fehler:
Ergebnis:
1286873 / (30 * 5) = 8579,15
Anfang und Ende der Fehlerausgabe:
Hinweis:
- Wenn Sie
.C
sich als gültige Erweiterung qualifizieren , beträgt die Punktzahl 1.206.869 / (28 * 3) = 14.367,49.- Wenn Dennis 'empfohlenes zweites #include hinzugefügt wird, lautet der Dateiname "a.cpp" und der Score 80.797.292.934 / (46 * 5) = 351.292.578,97
quelle
#include"a.cpp"
.#include
. Es ist unendlich ... Wenn es noch läuft, wenn ich morgen früh aufwache, ist es unendlich genug für mich. Werden Sie auf dem Laufenden halten, ha (obwohl es derzeit 5,1 MB / s leitetwc
, wennwc
also ein 32-Bit-Zähler verwendet wird, kann nach meinen Berechnungen etwas Seltsames in etwa 13 Minuten passieren.)gcc 4.9.2, Score:
222.898.664,663.393.783Dies basiert stark auf der Antwort von @ JasonC , aber er sagte, er wolle diese Verbesserung nicht würdigen .
Die Fehlerausgabe des folgenden Codes ist 126.044.818.789 Byte lang. Theoretisch sollte der Score viel höher sein (und mit zunehmender Anzahl von include-Anweisungen gegen unendlich gehen), in der Praxis nimmt er jedoch ab, indem mehr include-Anweisungen hinzugefügt werden.
Originaldatei (37 Byte)
Geänderte Datei (38 Bytes)
quelle
#include
Verschachtelungsbeschränkung von 200 Ebenen, sodass Ihre rekursiven Werte#include
effektiv zu einem 200-Bit-Binärzähler werden.gcc, 4.9.2, Score: 22.2
Originaldatei: 0 Bytes (a.cpp)
Kompiliert sauber:
Geänderte Datei:
Fehler:
Ergebnis
111/1/5 = 22,2
quelle
11.126,95
9.105,442.359,371.645,94266,88PunkteMehr Präprozessor-Missbrauch! Dieses Mal bringen wir die Standardbibliothek zum Weinen.
Ohne Tippfehler:
Mit Tippfehler:
Fehler:
[SNIP]
g++-4.9 -std=c++11 -c a.C
Erzeugt auf meinem Ubuntu-Rechner 1.101.568 großartige Fehlerbytes mit einer Punktzahl von 1101568/33/3 = 11.126,95.quelle
#define
die meisten Punkte für Sie ergeben.typedef
durcht;
. Jetzt brechen Sie nicht nur jede Verwendung von ab,typedef
sondern Sie erhalten auch eine Tonne von "t nennt keinen Typ" -Fehlern. Oder%;
um "erwartete unqualifizierte ID vor% Token" zu erzeugen.#define typename *
und#define int class std
schien viel mehr Fehler zu erzeugen.62,93 Punkte
Nur ein paar C ++ Meta Black Magic, kompiliert mit
g++-4.8 -c -std=c++11 a.cc
:Ungolfed:
G ++ hat ein Rekursionslimit von 900, so dass ein Wechsel
B<1>
inB<-1>
einen 31-Bit-Bereich einen ... interessanten Effekt hat.\n
einige Texteditoren fügen das letzte nicht automatisch hinzu,vim
aber nicht).a.cc
-ftemplate-backtrace-limit=0
Schalter erfordern . Das würde für mich auch 3185 Punkte bedeuten!std::unique_ptr
ist nur die Template-Klasse, die es schafft, die längste Fehlermeldung auszugeben, die durch Ausprobieren und Wissen über die STL und Katzen und so weiter gefunden wurde.quelle
Ergebnis 7.865
Streng genommen ist die 0-Byte-Antwort NICHT korrekt, da ideone.com die Kompilierung der Datei ohne Fehler ablehnt. Das gleiche gilt für das Beispiel
int foo();
- es wird nicht auf ideone.com kompiliert (ich kann wegen fehlender Reputation keinen Kommentar abgeben ...)Das kleinstmögliche Programm zum Kompilieren
#includes
ist also:Wenn Sie diesen in den folgenden Code ändern, schlägt der Fehler mit 409 Byte Fehlercode fehl (nach dem Umbenennen von prog.cpp in a.cc aus der ideone.com-Ausgabe):
409 / (13 * 4) = 7,865
Bitte aktualisieren Sie die Frage entsprechend, da die angegebenen Beispiele nicht den angegebenen Regeln entsprechen ...
quelle
C, benannt als
.cc
Fehlercode:
quelle
main(){}
, aber ich bin nicht sicher) Ist das nicht auch nur eine Verbesserung der obigen Antwort? Sie können diese Antwort zwar auf jeden Fall behalten, aber wenn sie von der Antwort von @ StefanM inspiriert wurde, sollten Sie dies erwähnen. Nachdem Sie nun 50 Wiederholungen haben, können Sie überall Kommentare abgeben.Punktzahl 12.xx (Fehler beim LÖSCHEN eines Zeichens)
Bitte verzeihen Sie die Verletzung von Regel 2 (IMHO das Hinzufügen ODER Löschen eines Zeichens wäre im Sinne der Regel), aber das ist mir aus Versehen passiert (daher werden beim Schreiben von Real Code (TM) keine "absichtlich" missbräuchlichen Tricks angewendet). - Sowohl der funktionierende als auch der fehlerverursachende Code sind (oder sehen) einfach und unkompliziert aus, daher dachte ich, dass er ordentlich genug ist, um hier aufgenommen zu werden. Originalcode
Code, der den Fehler erzeugt (das letzte '<' wurde gelöscht, so dass es wie ein kleiner Vergleich aussieht, aber noooooooooooo ...)
Es sind "nur" 8241 Byte Compiler-Fehlermeldungen in ideone.com g ++ 4.3.2.
quelle