C für Dummies. Dan Gookin
/*
Eines Tages muss ich hier mal reinprogrammieren,
dass sich der Computer daran erinnert, was ich
beim letzten erfolgreichen Programmstart getan hatte
und was ich danach geaendert habe – es geht
naemlich nicht mehr. :(
*/
Beachten Sie, dass Kommentare für Sie gedacht sind, als Notiz- oder Spickzettel. Wenn Sie C in der Schule oder während des Studiums lernen, sind die Kommentare zur Befriedigung Ihres Lehrers oder Professors gedacht. Wenn Sie an einem Programmierprojekt arbeiten, dienen sie der Befriedigung des Teamleiters. Bei Programmen, die Sie für sich selbst schreiben, dienen die Kommentare Ihnen.
Bizzare Kommentare
Während meiner Laufbahn habe ich viele Beispiele für Kommentare gesehen, die Programme interessant aussehen lassen sollten. So was zum Beispiel:
/************************************************
** Das tollste Programm von Karl Napf **
************************************************/
Dieser Kommentar funktioniert. Er enthält eine Menge *
, aber die befinden sich immer noch zwischen /*
und */
, es ist also ein gültiger Kommentar.
/*
* Das ist eine langwierige Einleitung in ein
* seltsames Programm, das von jemand geschrieben
* ist, der an einer Uni hockt, ziemlich von sich
* selbst überzeugt ist und glaubt, dass kein
* Sterblicher C lernen kann – und der drei Bücher
* über C geschrieben hat, um es zu beweisen.
*/
Die Idee ist, einen Balken aus *
zu erzeugen, sodass der Kommentar zwischen /*
und */
auf der Seite auffällt.
// Das ist eine andere Art Kommentar, wie sie bei
// C++-Compilern auch erlaubt ist
Hier können Sie eine andere Art Kommentar sehen. Zwei Schrägstriche leiten den Kommentar ein, der am Ende der Zeile automatisch endet (es gibt kein Endzeichen wie */
). Dieser Stil ist ideal, wenn man nicht jeweils den Anfang und das Ende eines Kommentars kennzeichnen will, zum Beispiel am Ende einer Zeile. So wie hier:
printf("Vornamen eingeben: "); // Aufforderung
scanf("%s", vorname); // Eingabe holen und ablegen
Das hat also den Vorteil, schnell zu sein, dafür kann man mit /*
und */
leichter größere Abschnitte als Kommentar kennzeichnen, bei //
müssen Sie jede Zeile mit //
beginnen.
Da wäre zu erwähnen, dass diese Art, Kommentare zu kennzeichnen, nur von C-Compilern verstanden wird, die mindestens C99 übersetzen können – dies gilt aber praktisch für alle modernen Compiler. Ist der Compiler in einem älteren Modus eingestellt, in dem er nur C89 kennt, funktioniert
//
nicht. Sollten Sie also eine entsprechende Fehlermeldung bei der Übersetzung erhalten, können Sie die //
-Kommentierung nicht verwenden und müssen sich mit dem althergebrachten /*
und */
begnügen.
Kommentare als Schalter
Kommentare werden vom Compiler ignoriert. Egal, was zwischen /*
und */
kommt, es wird übersprungen. Sogar lebensnotwendige Informationen, große Geldbeträge oder die Quelle ewiger Jugend – das wird alles überlesen, wenn es in einem C-Kommentar vorkommt.
Ändern Sie den Quelltext von Color.c
, sodass das Ende so aussieht:
/*
printf("Die Lieblingsfarbe von %s ist %s\n", name, color);
*/
Um die Änderung durchzuführen, müssen Sie die folgenden zwei Schritte erledigen:
1 Fügen Sie eine Zeile mit einem /* vor der printf-Funktion ein.
2 Fügen Sie eine Zeile mit einem */ nach der printf-Funktion ein.
Nun ist das printf
ausgeschaltet; kompilieren und starten Sie das Programm. Es läuft wie zuvor, aber es gibt keinerlei Ausgabe. Der Grund ist, dass die beiden printf
-Funktionen auskommentiert wurden.
Sie können Kommentare benutzen, um Teile des Programms auszuschalten. Wenn etwas nicht einwandfrei läuft, können Sie es »auskommentieren«. Sie können eventuell noch eine kleine Notiz für sich selbst hinzufügen, warum Sie das getan haben.
Manchmal merken Sie, dass irgendetwas nicht so läuft, wie es sollte. Der Grund hierfür könnte sein, dass Sie etwas aus Versehen auskommentiert haben. Achten Sie immer darauf, dass Ihre /*
und */
zueinander passen und nur das einklammern, was auch gewünscht ist.
Vermeidung »verschachtelter« Kommentare
Den größten Fauxpas erlauben Sie sich, wenn Sie Kommentare »verschachteln« oder einen Kommentar in einen anderen einfügen. Zum Beweis präsentiere ich das folgende Fragment aus einem Quelltext:
if (all_else_fails)
{
display_error(errno); /* Fehlernummer existiert */
walk_away();
}
else
get_mad();
Machen Sie sich keine Gedanken über die inhaltliche Bedeutung dieses Codes, das wird Ihnen später klar werden. Achten Sie mal darauf, dass die Funktion display_error
einen Kommentar hinter sich stehen hat: Fehlernummer existiert
. Aber nehmen wir mal an, Sie wollen mit Ihrem noch kommenden C-Verständnis diesen Teil des Programms auskommentieren, sodass nur noch die get_mad()
-Funktion ausgeführt wird. Sie kommentieren also alles andere aus:
/*
if (all_else_fails)
{
display_error(errno); /* Fehlernummer existiert */
walk_away();
}
else
*/
get_mad();
So, nun sieht der Compiler nur noch get_mad()
, oder?
Tja, Pustekuchen. Der Kommentar beginnt in der ersten Zeile mit einem /*
. Aber er endet in der Zeile mit der display_error
-Funktion. Weil die Zeile mit einem */
endet, ist dies auch das Ende des Kommentars. Der C-Compiler macht dann in der Zeile mit der walk_away
-Funktion weiter und erzeugt einen Syntaxfehler, sobald er auf die allein stehende geschweifte Klammer }
trifft. Das zweite Kommentarende (das über der get_mad()
-Funktion) erzeugt auch noch einen Fehler. Zwei Fehler!
Um diese Falle zu vermeiden, müssen Sie also ein wenig aufpassen, wenn Sie einen Teil des C-Programms ausschalten. Die Lösung hier wäre, Fehlernummer existiert
nicht als Kommentar zu schreiben oder Sie kommentieren jede Zeile für sich aus:
/* display_error(errno); /* Fehlernummer existiert */
Diese Methode funktioniert, weil der Kommentar immer noch mit einem */
endet. Das zusätzliche /*
im Kommentar wird ignoriert.
Außerdem haben Sie vielleicht gemerkt, dass der »neue« Kommentarstil