namespace cpp

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


humor:notruth

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?

humor/notruth.txt · Zuletzt geändert: 2014-07-17 18:20 (Externe Bearbeitung)