Fehlermeldungen lesen
Fehler gehören beim Programmieren dazu. Auch erfahrene Programmierer machen sie jeden Tag. Wichtig ist, sie schnell zu finden und zu beheben, und dabei helfen dir Fehlermeldungen.
Bevor ein Programm läuft, geht der Compiler es ganz durch. Wenn er einen Fehler findet, führt er das Programm gar nicht aus, auch nicht die Zeilen vor dem Fehler, und zeigt eine rote Fehlermeldung. Zum Beispiel fehlt diesem Programm in Zeile 4 ein Semikolon:
#include <stdio.h>
int main(void) {
printf("Hallo!\n")
printf("Wie geht es dir?\n");
return 0;
}Clang, der Compiler auf dieser Seite, gibt aus:
main.c:4:23: error: expected ';' after expression
4 | printf("Hallo!\n")
| ^
| ;
1 error generated.Der wichtigste Teil der Meldung ist ihre erste Zeile. Lies sie von links:
main.cist der Name der Datei mit dem Programm, also der, die im Editor steht.4ist die Nummer der Zeile mit dem Fehler. Die Zeilennummern siehst du links im Editor.23ist die Nummer der Spalte: das wievielte Zeichen in der Zeile es ist. Die vier Leerzeichen am Zeilenanfang zählen mit.error:sagt, dass es sich um einen Fehler handelt. Danach folgt eine Beschreibung auf Englisch:expected ';' after expressionbedeutet, dass der Compiler nach dem Ausdruck, hier nachprintf(...), ein;erwartet hat.
Darunter zeigt Clang die Zeile mit dem Fehler und markiert die Stelle mit ^. Oft schreibt es sogar dazu, was dort fehlt, hier ;. Die letzte Zeile, 1 error generated., sagt, wie viele Fehler Clang gefunden hat.
Die Meldung sieht etwas anders aus, wenn das schließende Anführungszeichen eines Textes fehlt:
#include <stdio.h>
int main(void) {
printf("Hallo!\n);
return 0;
}main.c:4:12: warning: missing terminating '"' character [-Winvalid-pp-token]
4 | printf("Hallo!\n);
| ^
main.c:4:12: error: expected expression
1 warning and 1 error generated.Eine Zeile mit warning: ist eine Warnung: Der Compiler weist auf etwas hin, das verdächtig aussieht. Hier ist sie sogar hilfreicher als der Fehler selbst. missing terminating '"' character bedeutet, dass das schließende Anführungszeichen fehlt, und ^ zeigt auf das Anführungszeichen, das keinen Partner hat. Ohne es kann der Compiler nicht erkennen, wo der Text endet, und findet hinter printf( nichts Sinnvolles: expected expression bedeutet, dass er einen Ausdruck erwartet hat, etwas, das ausgegeben werden kann.
Ein Programm, das nur Warnungen und keine Fehler hat, läuft, und diese Seite zeigt seine Warnungen nicht an. Deshalb macht die Seite die wichtigsten Warnungen zu Fehlern, zum Beispiel das %d ohne Wert aus der Übung Text und Zahlen. Du erkennst sie an -Werror am Zeilenende: [-Werror,-Wformat-insufficient-args].
Ein Fehler löst manchmal mehrere Meldungen aus, und manchmal verdeckt er einen anderen Fehler, den der Compiler erst findet, nachdem du den ersten behoben hast. Deshalb solltest du immer den ersten Fehler zuerst beheben und das Programm erneut ausführen. Die anderen Meldungen verschwinden oft, weil sie nur vom ersten verursacht wurden. Und umgekehrt: Nach einer Korrektur kann ein neuer Fehler auftauchen.
Weitere häufige Fehler und ihre Meldungen:
printfist falsch geschrieben, zum BeispielprinftoderPrintf:call to undeclared function 'prinft'; ISO C99 and later do not support implicit function declarations. Der Compiler kennt keine Funktion mit diesem Namen. In einer Notiz darunter schlägt er sogar vor, was du wahrscheinlich meintest:did you mean 'printf'?- Die Zeile
#include <stdio.h>fehlt: Die Meldung beginnt mitcall to undeclared library function 'printf', und die Notiz darunter sagt, was zu tun ist:include the header <stdio.h>. - Das
}am Ende vonmainfehlt:expected '}', mit der Notizto match this '{', die auf die Klammer zeigt, die keinen Partner hat.
Zeilen mit note: sind nur zusätzliche Hinweise. Manche zeigen auf Dateien der Standardbibliothek, wie stdio.h, und die musst du nicht lesen.
So schreibst du es:
Anweisungen
- 1
Das Programm im Editor hat zwei Fehler. Führe es aus und lies die erste Fehlermeldung: In welcher Zeile und in welcher Spalte steht der Fehler, und was ist falsch? Behebe ihn und führe das Programm erneut aus. Es erscheint eine neue Meldung: Der erste Fehler hat den zweiten verdeckt. Behebe auch den, damit das Programm Folgendes ausgibt:
Tic-Tac-Toe-Turnier Wann: Samstag um 10:00 Wo: Klassenzimmer 2B