Zeile 59: | Zeile 59: | ||
Bereits bekannte Bugs findet man [http://gcc.gnu.org/bugs/#known hier]. Auf der Seite ist auch alles angegeben um einen eigenen Bugreport zu verfassen. Um sicher zu gehen lohnt sich dabei immer ein Besuch auf [https://stackoverflow.com/ Stackoverflow] | Bereits bekannte Bugs findet man [http://gcc.gnu.org/bugs/#known hier]. Auf der Seite ist auch alles angegeben um einen eigenen Bugreport zu verfassen. Um sicher zu gehen lohnt sich dabei immer ein Besuch auf [https://stackoverflow.com/ Stackoverflow] | ||
+ | |||
+ | |||
+ | [[Kategorie:Grundlagen]] | ||
+ | [[Kategorie:Quellcode C]] |
Version vom 12. März 2014, 16:52 Uhr
Dieser Artikel behandelt das Vorgehen bei Fehlermeldungen des GCC - C Compilers. Ziel des Artikels ist es eine Hilfestellung für Anfänger und Fortgeschrittene zu geben, wenn der Code mal nicht so kompilieren will wie man sich das vorstellt. Insbesondere soll der Artikel eine Ausgangsbasis für eine eigene Fehlerrecherche geben.
Die offizielle Dokumentation des GCC Compilers. Desweiteren sollte man auch die Warnungen des Compilers beachten, auch wenn sich der Code trotz der Warnungen kompilieren lässt (Deswegen sollte man auch immer mit der Option -Wall kompilieren). Prominentes Beispiel hierfür ist: int i = 10; if(i = 10) //Verwendung von "=" statt "==" , ruft Warnung aber keinen Fehlerhervor { //do some fancy stuff }
Um solche Fehler im Vorraus zu vermeiden kann man auch eine sogenannte statische Code Analyse durchführen. Hierbei wird der Code auf bestimmte Regeln und auch stilistische Fehler bzw. mögliche Fehlerquellen überprüft. Für C hilft hierbei das Tool Check. Hiermit kann z.B. erkannt werden ob man auf Arrays außerhalb ihrer Grenzen zugreift.
Inhaltsverzeichnis
Probleme
- Syntax - z.B.: "expected 'TOKEN' before 'TOKEN' token" - Fehlende schließende Klammer }
- Linker - z.B: "undefined symbol"
- Makefile - Inkorrekte Makefile Syntax - Datei im Makefile vergessen - Falsche Compileroptionen
- Compilerbugs - Selten jedoch möglich. Ein Compiler ist ein unglaublich kompliziertes Werkzeug
Eine halbwegs vollständige Liste mit GCC Fehlermeldungen kann man Hier und Hier finden.
Probleme Lösen
Allgemein
Google is your friend, ist beim Programmieren fast immer wahr. Es gibt sogut wie keinen Fehler bzw. Problem beim Programmieren in C, dass nicht bereits jemand vor euch hatte und das online beantwortet wurde. Meiner Ansicht nach gibt es kein C - Syntax, Programmstruktur oder sonstiges Problem, das nicht bereits auf Stackoverflow behandelt wurde. Auch was das Programmieren von Mikrocontrollern anbelangt findet man im Roboternetz Forum oder auf mikrocontroller.net Lösungen zu den häufigsten Problemen.
An dieser Stelle sei auch noch auf das C-Tutorial im RN-Wiki verwiesen.
Syntax Probleme
Ganz einfach: man verwende die richtige Syntax. Das ist in manchen Fällen einfacher gesagt als getan. Der Compiler gibt einem jedoch in vielen Fällen die richtige Zeile aus und was er in dieser Zeile erwartet. Manchmal kann es jedoch vorkommen, dass ein Fehler an einer Stelle (z.B. ein fehlendes Semikolon) sich erst einige Zeilen später bemerkbar, indem die folgenden Zeilen in der Form nicht mehr kompilierbar sind. Deshalb: Überprüfe auch die Umgebung der angegeben Zeile. Das kann insbesondere bei vergessenen } passieren.
//Todo - Hier ein Auflistung der häufigsten Fehler einfügen
Linker Probleme
Linker Probleme treten auf, wenn der Linker bestimmte Funktionen nicht finden kann, auf die aber verwiesen wird. Beispiel: Man hat folgende 4 Dateien:
- dateiA.c
- dateiA.h
- dateiB.c
- dateiB.h
In der Headerdatei dateiB.h wird folgende Funtion deklariert: int dosomething(int i); Die dateiB.c bietet jedoch keine Implementierung hierfür. In der Codedatei dateiA.c wird nun das Headerfile dateiB.h eingebunden und die Funktion "dosomething(1)" aufgerufen. Der Compiler wird ohne Problem dateiA.c und dateiB.c compilieren. Wenn der Linker jedoch die Implementierung von "dosomething" sucht wird er sie nicht finden.
Derartige Fehler können auftreten wenn man z.B. eine C Datei im Makefile vergessen hat oder die Implementierung einer Funktion.
Compilerbugs
Bereits bekannte Bugs findet man hier. Auf der Seite ist auch alles angegeben um einen eigenen Bugreport zu verfassen. Um sicher zu gehen lohnt sich dabei immer ein Besuch auf Stackoverflow