Die Herausforderung:
Schreiben Sie ein sehr kurzes Programm, das beim Kompilieren die meisten Compiler-Warnungen und -Fehler erzeugt. Es kann in jeder Programmiersprache geschrieben werden.
Wertung:
Die Partitur ist durch diese Gleichung bestimmt: errors_and_warnings_length/code_length
. Höchste Punktzahl gewinnt.
Beispiel:
Das C # -Programm class
ist 5 Zeichen lang und generiert 3 Warnungen, was einer Punktzahl von (1/5) * 3 = 0,6 entspricht.
BEARBEITEN:
Aus Unklarheiten müssen Programme mindestens 1 Zeichen lang sein. Andernfalls würde es eine Punktzahl von unendlich bekommen.
gcc -Wall -pedantic
ist sehr verschieden von plain ol`gcc
unterscheidettcc
sich vermutlich von einem anderen c-Compiler.Antworten:
GCC, score 2 200 / über 36 ≈ 4,5 × 10 58
Ich habe diesen Code noch nicht fertig kompiliert, aber basierend auf Tests und einfacher Mathematik sollte er insgesamt 2 200
#include nested too deeply
Fehler erzeugen .Natürlich ist das Programm einfach erweiterbar. Eine dritte Linie Hinzufügen bringt die Gäste bis zu 3 200 /54 ≈ 4,9 × 10 93 . Vier Linien geben 4 200 / über 72 ≈ 3,6 x 10 118 , und so weiter.
quelle
#include
] Ebenen fest, um eine außer Kontrolle geratene Rekursion zu vermeiden. Der Standard erfordert mindestens 15 Ebenen. "C, 0 Zeichen - Punktzahl = (1/0) * 1 = Unendlich
erzeugt 1 Fehler:
Hinweis: http://ideone.com/xdoJyA
quelle
GCC, Punktzahl 5586.6 (und mehr, falls erforderlich)
179 Zeichen, 1000003 Warnungen / Fehler (mit
-Wall
)Dies kann natürlich beliebig erweitert werden. Beispielsweise würde die Verwendung von 10
#define
s anstelle von 5 und einer Länge von 20 "Anrufen" anstelle von 10 zu einer Punktzahl von etwa (20 ** 10) / (179 * 4) = 14301675977.65 führen (und die Ausführung würde einige Zeit in Anspruch nehmen ;)quelle
#define X(A) A,A,A,A,A,A,A
und könnenX(X(X(X(X(X(A))))))
Sie Code viel schneller duplizieren.GCC zweimal, 86
22 Zeichen, 1898 Fehler + Warnungen auf meinem System.
Ich bin sicher, dass dieser Ansatz erheblich verbessert werden kann, indem längere Dateien mit kürzeren Namen ausgewählt werden.
quelle
/usr/bin/gdb
ist deutlich größer (5,5M vs 760K), aber/vmlinuz
bei 5,6M könnte Ihre beste Wahl sein.HQ9 ++, 1 (Limit von (n + 29) / n)
Das Folgende gibt die Warnung
Warning: this is not a quine
für jedes Q im Code aus.Klein ist gut, oder? Hmm ...
quelle
C, .727
11 Zeichen, 5 Fehler, 3 Warnungen, (1/11) * 8 = .727273
quelle
NASM, Punktzahl 63/40 * 2 ^ 32 ≈ 2.905 * 10 ^ 19
Gibt
c.asm:3: error: label or instruction expected at start of line
2 ^ 64-mal aus. Dies ist wiederum leicht auf viel größere Ausgänge erweiterbar.quelle
C ++ 98 (211 Byte) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031
Ich wollte sehen, wie gut ich in C ++ ohne den Präprozessor überhaupt tun könnte. Dieses Programm erzeugt 2.139.390.572 Bytes an Ausgabe, von denen der größte Teil eine einzelne Fehlermeldung ist.
Ungolfed:
Dieses Programm definiert eine rekursive Strukturvorlage R, die ein typedef D mit zwei Kopien von R enthält. Dies führt zu einem exponentiell wachsenden Typnamen, der in der Fehlermeldung vollständig ausgedruckt wird. Leider scheint g ++ zu ersticken, wenn versucht wird, eine Fehlermeldung zu drucken, die länger als (1 << 31) Byte ist. 2.139.390.572 Bytes waren das Maximum, das ich erreichen konnte, ohne es zu überschreiten. Ich bin neugierig, ob jemand die Rekursionsgrenzen und Parametertypen anpassen kann
27, float, 24, int*const*
, um näher an die Grenze heranzukommen (oder einen Compiler finden kann, der eine noch längere Fehlermeldung ausgibt).Auszüge aus der Fehlermeldung:
2.139.390.572 Bytes / 211 Bytes = 10.139.291,8quelle
SmileBASIC, 1/1 = 1
Erzeugt den Fehler
Syntax Error in 0:1
quelle