1.5 Übersetzen mit GCC und Clang
Die Verwendung von Kommandozeilen-Compilern wie GCC oder Clang soll hier auch kurz beschrieben werden, denn vielleicht verwenden Sie ja Linux. Dies ist inzwischen nicht mehr so unwahrscheinlich, denn gerade der Raspberry Pi wird inzwischen gerne für den Einstieg in die Programmierung mit Python oder C verwendet. Auch auf diesem Gerät läuft Linux, und da diesem Betriebssystem normalerweise ein moderner GCC-Compiler beiliegt, sind auch alle Programme in diesem Buch auf dem Pi ausführbar. Mehr noch: Wir haben dafür gesorgt, dass dies so ist und sämtliche Beispiele auf dem Pi getestet. Dies gilt auch für die folgenden Kommandos.
Schreiben Sie jetzt zunächst Ihren Quelltext mit einem beliebigen ASCII-Editor (z. B. Nano), und speichern Sie ihn mit der Endung *.c ab. Wenn Sie einen C++-Compiler verwenden, macht dies auch nichts, denn C++ ist zu C kompatibel. Verwenden Sie in diesem Fall die Endung *.cpp. Wechseln Sie nun in die Kommandozeile, und übersetzen Sie den Quelltext dann mit GCC oder Clang. Gerade bei kleineren Listings wie in diesem Buch ist dieser Vorgang weniger aufwendig, als den Quelltext mit einer Entwicklungsumgebung zu übersetzen.
Ich gehe hier davon aus, dass Sie Ihre Kommandozeile kennen und sich mit den unterschiedlichen Kommandos durch die Verzeichnisse bewegen können. Wenn Sie den Quelltext geschrieben und abspeichert haben, öffnen Sie die Kommandozeile und wechseln in das Verzeichnis, in dem Sie den Quelltext gespeichert haben. Tippen Sie Folgendes ein (listing001.c sei der abgespeicherte C-Quelltext):
gcc -o listing001 listing001.c
./listing001
Mit dem Schalter -o wird der Compiler dazu veranlasst, aus der Quelldatei listing001.c die ausführbare Datei listing001 zu erzeugen. Sie können statt listing001 natürlich auch einen anderen Programmnamen verwenden, z. B. HalloWelt.c. In der folgenden Zeile wird daraufhin die ausführbare Datei in der Kommandozeile mit dem Programmnamen gestartet. Alle folgenden Beispiele können Sie nun auf diese Weise ausführen: Erst übersetzen, dann starten!
In der Praxis empfiehlt es sich manchmal, mehrere solcher Flags wie -o zu verwenden, um dem Compiler bei einer Warnung oder Fehlern mehr Informationen zu entlocken. Ein Flag ist quasi ein Schalter, mit dem Sie ein bestimmtes Verhalten ein- oder ausschalten können. Unsere minimale Zeile zum Übersetzen eines Quelltextes lautet daher:
gcc -Wall -o listing001 listing001.c
./listing001
Der Schalter -Wall gibt hier alle sinnvollen Warnungen des Compilers aus. Der Begriff Wall setzt sich aus Warning und all zusammen. Sollten Sie den Quellcode nur kompilieren (und nicht zusätzlich linken) wollen, müssen Sie statt -o den Schalter -c verwenden.
Flags für C99, C11 und C18
Wenn der Compiler nicht schon von Haus aus zumindest den C11-Standard verwendet, können Sie diesen mit dem Flag -std=c11 aktivieren. Auf dem Raspberry Pi müssen Sie dies sogar tun, denn sonst werden manche Dinge wie z. B. boolesche Variablen nicht unterstützt. Dasselbe gilt auch für den vorherigen C99-Standard, den Sie mit -std=c99 aktivieren können. Den C18-Standard aktivieren Sie mit:
gcc -Wall -o prgname prgname.c -std=c18
./prgname