In SP ist der Referenz-Compiler GCC (C Compiler des GNU Projekts).
GCC ist ausführlich dokumentiert. Die Dokumentation für Version 10 (was im CIP installiert ist) kann hier gelesen werden. In einem Terminal ist es auch möglich
$ info gcc
einzugeben, und mit
dem Info
Reader (vergleichbar zu dem man
Befehl,
siehe auch Wikipedia) lesbar.
Ich finde es ist Empfehlenswert die Manual zu durchstöbern, da sie grundsätzlich gut geschrieben ist. Interessante Seiten in der Manual könnten bspw. sein:
Run-Time(Program Instrumentation) Funktionen erweitern, die zum analysieren benutzt werden können. Bspw. kann man mit
-fsanitize=leak
eine Art Valgrind-iges warnen
bei Speicherlecks direkt in das Programm einbauen,
mit -fsanitize=undefined
Warnungen generieren wenn
sich das Programm auf undefiniertes Verhalten verlässt,
oder -fsanitize=thread
um zu versuchen
Wettlaufsitiationen zu erkennen.
-fanalyzer
versucht
mögliche Programmflüsse zu analysieren, um herauszufinden ob ein
Segmentation Fault, Speicher Lecks, etc. möglich sind. Leider hat
es noch ein paar false positives(besonders in Version 10), also kann man sich nicht vollkommen darauf verlassen.
-Wall
und -Werror
gibt es noch
eine lange Liste
an zusätzlichen
Warnungen die beim Programmieren helfen können
(bspw. -Wextra
könnte vielen bereits helfen).
(Weit darüber hinaus, wer sich für GCC selbst interessiert
könnte
kann GCC
for New
Contributors
, GNU
C Compiler Internals
oder
das GCC Wiki anschauen)
Es kann auch hilfreich sein neben GCC andere Compiler zu benutzen, um
seine Programme zu testen. Hierzu
zählt Clang (mit dem
extra-strengem -Weverything
Flag)
und TCC, ein schneller und
kleiner C11 Compiler oder nach dem gleichem
Motto SCC. Letztere sind
leider nicht im CIP installiert. Auch
nett: chibicc, chibicc
is yet another small C compiler that implements most C11 features
und C4, C in four
functions
.
Manche Compiler wie CompCert sind formal verifiziert, und können dem Benutzer zusichern, dass in einem Fragment von C keine Fehler bei der Übersetzung auftreten (in SP ist es meistens eine schlechte Strategie darauf zu setzen, dass ein Fehler vom Compiler eingefügt wurde).
Eine längere Liste kann hier gefunden werden.
In meiner allgemeinen Link Sammlung gibt es noch ein paar Links zu dem Thema.
$Id: compiler.html,v 1.14 2024/07/12 11:15:32 oj14ozun Exp $