notruth : Wahrheit aus dem Nichts?
Es gibt auch so etwas wie Schwachsinn auf höchstem wissenschaftlichen Niveau.— Bernhard Gentzsch
Kann man damit also Wahrheit aus dem Nichts erzeugen? Das kleinste C++-Programm wäre
- truth.cpp
int main() { return true; }
Das Programm lässt sich fehlerfrei übersetzen und ausführen. Das Makefile
- Makefile
run: truth truth
scheitert dennoch beim Aufruf make
. Warum? Ist make
verantwortungsbewusster als der C++-Compiler?
Die Konstante true
wird als 1 ausgewertet und ist damit gleichwertig zu EXIT_FAILURE
, was dem aufrufenden Betriebssystem einen Fehler signalisiert. Die Anweisung
return EXIT_SUCCESS;
bedeutet hingegen dasselbe wie return false;
also Vorsicht beim Umgang mit "Wahrheiten" aus dem Computer!
void main() { }
ist auch verkehrt, sagt der C++-Standard. Der Standard versucht diese Klippe zu umschiffen, indem der Funktion main() ausnahmsweise erlaubt wird, ohne Rückkehr-Anweisung zu enden und ist dabei gleichwertig zu return false;
:
- notruth.cpp
int main() { }
Bei jeder anderen Nicht-void
-Funktion stellt die Abwesenheit der Rückkehr-Anweisung einen Fehler dar. Das wiederum finde ich nicht lustig.
Auf Betriebssystemebene setzt sich diese Merkwürdigkeit fort. Die (UNIX-)Datei /usr/bin/true
enthielt ursprünglich gar nichts, die Datei /usr/bin/false
den Befehl exit 255
.
Es dauerte einige Zeit, bis es Leuten, die nichts besseres zu tun hatten, gelang, die Dateien in C-Programme zu verwandeln, Kommentare mit einem angeblichen Copyright auf die Wahrheit und Optionen wie --help
und --version
hinzuzufügen… Lustig, oder?