Kommentare in C
Traditionelle Kommentare
In C -Programme können Kommentare eingefügt werden.
Kommentare können (außerhalb eines Kommentars und eines Zeichenfolgenliterals) an jeder Stelle, an der auch Leerraum stehen dürfte, mit dem Zeichenpaar »/*« eingeleitet werden. Sie enden mit dem ersten folgenden Zeichenpaar »*/«. (In beiden Zeichenpaaren darf kein Leerraum zwischen dem Stern und dem Schrägstrich stehen.)
Das Zeichen »/« wird „Schrägstrich“ genannt.
Das Zeichen »*« wird „Stern“ (oder „Sternchen“) genannt.
Das Zeichenpaar »/*« muß genau so geschrieben werden (es darf kein Leerzeichen eingefügt werden).
Innerhalb eines solchen Kommentars hat das Zeichenpaar »/*« keine besondere Bedeutung.
Ein Kommentar gilt insgesamt als ein Leerraumzeichen. Der in einem Kommentar enthaltene Text wird von einer C -Implementation im allgemeinen ignoriert. Daher können Kommentare verwendet werden, um irgendwelche Notizen in ein Programm zu schreiben oder auch um lexikalische Einheiten zu trennen.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%d\n", -/* Vorzeichenwechsel */-/* Vorzeichenwechsel */65 ); }stdout
65
Entfernt man die beiden Kommentare in dem obigen korrekte Programm, so erhält man das folgende fehlerhafte Programm.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%d\n", --65 ); }- Konsole
main.c: In function 'main':
main.c:6:19: error: lvalue required as decrement operand
{ printf
( "%d\n", --65 ); }
^- Konsole (übersetzt)
main.c: In der Funktion 'main':
main.c:6:19: Fehler: Als Operand des Dekrements wird ein L-Wert erwartet
{ printf
( "%d\n", --65 ); }
^
Kommentare werden vor der weiteren Verarbeitung eines Quelltextes bei der Übersetzung praktisch durch ein Leerzeichen ersetzt. Aus dem obigen Programm mit Kommentaren wird also das folgende Programm gemacht.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%d\n", - - 65 ); }stdout
65
Zeichenfolgenliterale
Der Kommentareinleiter »/*« leitet innerhalb eines Zeichenfolgenliterals keinen Kommentar ein, sondern gilt nur als Teil der Zeichenfolge.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%s\n", "ABC/*DEF*/GHI" ); }stdout
ABC/*DEF*/GHI
Umgekehrt gelten Anführungszeichen in Kommentaren nicht als Beginn eines Zeichenfolgenliterals.
main.c
#include <stdio.h>
int main( void )
{ printf
( "%d\n", 2/*"*/ ); }stdout
2
Übungsfragen
? Kommentare zählen
Ist das folgende Programm korrekt, und, wenn ja: wie viele Kommentare finden sich darin?
main.c
#include <stdio.h>
int main( void )
{ printf
( "%d\n", 65/* alpha /* // /** gamma */ ); }
? Kommentare zählen *
Ist das folgende Programm korrekt, und, wenn ja: wie viele Kommentare finden sich darin?
main.c
#include <stdio.h>
int main( void )
{ printf
( "%d\n", 65/* alpha /* gamma */ gamma */ ); }
? Kommentare zählen *
Ist das folgende Programm korrekt, und, wenn ja: wie viele Kommentare finden sich darin?
main.c
#include <stdio.h>
int main( void )
{ printf
( "%s\n", "/* alpha " ); }
? Kommentare zählen *
Ist das folgende Programm korrekt, und, wenn ja: wie viele Kommentare finden sich darin?
main.c
#include <stdio.h>
int main( void )
{ printf
( "%s\n", /* /* */ "*/" ); }
? Kommentare zählen *
Ist das folgende Programm korrekt, und, wenn ja: wie viele Kommentare finden sich darin?
main.c
#include <stdio.h>
int main( void )
{ printf
( "%d\n", 65/* alpha /* "delta" */ gamma */ ); }
Leerraumdiagramme für Leerraum *
Die folgenden Leerraumdiagramme beschreiben Leerraum einschließlich von Kommentaren. Ein genaues Verständnis dieser Diagramme ist aber für den Rest dieses Kurses nicht unbedingt wichtig.
Ein Leerraumdiagramm ist genauso zu verstehen, wie ein morphologisches Diagramm. Wir nennen es aber nicht „morphologisches Diagramm“, da morphologische Diagramme lexikalische Einheiten beschreiben und Leerraum keine lexikalische Einheit ist. Leerraumdiagramme werden daher auch nicht mit »|-|«, sondern mit »| |« gekennzeichnet.
Leerraumkomponente
.-------------.
| |----.----------------------------------------->| Leerzeichen |----.--->| |
| '-------------' ^
| |
| .-------------. |
'----------------------------------------->| Zeilenende |--->'
| '-------------' |
| |
v |
.-. |
( / ) |
'-' |
| |
| .---------------. |
| | jedes Zeichen | |
| .---| ausser "*" |<--------. |
| | | und "/" | | |
| | '---------------' | |
| .-. v | |
'--->( * )---'---------------------------->' |
'-' | ^ ^ |
| | | |
| | | |
.<-----------. | |
| | | |
| .-. | | |
'--->( / )---' .------------. |
| '-' | | |
| | | |
| v .-. | .-. |
'----------------'--->( * )---'---( / )----------'
'-' '-'Leerraum
.--------------------.
| |---.--->| Leerraumkomponente |---.--->| |
^ '--------------------' |
| |
'-----------------------------'