3.2 Ausführungszeichensatz (Steuerzeichen)
Beim Ausführungszeichensatz kommen zu den oben aufgeführten Zeichen noch weitere hinzu, die in diesem Abschnitt beschrieben werden.
Zuvor soll ein weiteres Programm analysiert werden. Dazu wird genauso vorgegangen, wie schon in Kapitel 2: das Listing in einem Texteditor abtippen, abspeichern und anschließend mit dem Compiler übersetzen.
Hier das Programmbeispiel zur Demonstration:
/* steuerzeichen.c */
#include <stdio.h>
int main(void) {
printf("Ein akkustisches Signal mit : (\\a)\a");
printf("\nEin Backspace mit : (\\b) | \bx\n");
printf("Ein Zeilenvorschub mit : (\\t) |\tx");
printf("\n\tC\n\ti\n\ts\n\tt\n\ttoll\n");
printf("\t u\n\t n\n\t d\n");
printf("\t macht Spass\n");
return 0;
}
Nach dem Übersetzen und Starten des Programms sieht die Ausgabe folgendermaßen aus:
Hier klicken, um das Bild zu Vergrößern
Abbildung 3.1
Steuerzeichen im Einsatz
Hier können Sie die Auswirkungen von Steuerzeichen, auch Escape-Sequenzen genannt, sehen. Diese Zeichen sind nicht druckbare Zeichen in so genannten char-Konstanten. Und wie der Name (Steuerzeichen) besagt und das Programm soeben gezeigt hat, können Sie damit die Ausgabe auf dem Bildschirm beeinflussen.
Steuerzeichen beginnen immer mit einem Backslash (\) und einer folgenden Konstante. Der Compiler behandelt diese Steuerzeichen wie ein einziges Zeichen. Mögliche Steuerzeichen und ihre Bedeutung können aus der folgenden Tabelle entnommen werden:
Tabelle 3.1
Steuerzeichen (Escape-Sequenzen) in Zeichenkonstanten
Steuerzeichen
|
Bedeutung
|
\a
|
BEL (bell) – akustisches Warnsignal
|
\b
|
BS (backspace) – setzt Cursor um eine Position nach links
|
\f
|
FF (formfeed) – ein Seitenvorschub wird ausgelöst. Wird hauptsächlich bei Programmen verwendet, mit denen Sie etwas ausdrucken können.
|
\n
|
NL (newline) – Cursor geht zum Anfang der nächsten Zeile
|
\r
|
CR (carriage return) – Cursor springt zum Anfang der aktuellen Zeile
|
\t
|
HT (horizontal tab) – Zeilenvorschub zur nächsten horizontalen Tabulatorposition (meistens acht Leerzeichen weiter)
|
\v
|
VT (vertical tab) – Cursor springt zur nächsten vertikalen Tabulatorposition
|
\"
|
" wird ausgegeben
|
\’
|
' wird ausgegeben
|
\?
|
? wird ausgegeben
|
\\
|
\ wird ausgegeben
|
\0
|
ist die Endmarkierung eines Strings
|
\nnn
|
Ausgabe eines Oktalwerts (z.B. \033 = ESCAPE-Zeichen)
|
\xhh
|
Ausgabe eines Hexdezimalwerts
|
Hierzu noch ein Listing, wie Sie außer mit dem Newline-Zeichen (\n) noch einen Zeilenvorschub auslösen könnten:
/* newline.c */
#include <stdio.h>
int main(void) {
printf("Darstellung von Newline \\n \n");
printf("Mögliche Ausführung von Newline\n");
printf("Mit hexadezimaler Angabe : \\xa \xa");
printf("Mit oktaler Wertangabe : \\012 \012");
printf("Mit dezimaler Angabe : 10%c",10);
printf("Hallo\0Ich bin nicht mehr lesbar\n");
return 0;
}
Dass auch ein Zeilenvorschub bei \xa , \012 und 10 vorgenommen wurde, liegt daran, dass alle diese Zeichen intern den Wert 10 darstellen. Und wenn Sie sich die ASCII-Code-Tabelle (im Anhang) ansehen, können Sie erkennen, dass alle diese Werte in derselben Zeile stehen und das newline-Zeichen darstellen. Dass bei der letzten printf()-Anweisung der Text nur bis »Hallo« ausgegeben wird, liegt am Steuerzeichen '\0', womit eine Stringkonstante terminiert (abgeschlossen) wird. Wird das Beispiel mit einer höheren Warnstufe übersetzt (bspw. mit dem Flag -Wall beim GCC), wird der Compiler über diese Zeile sowieso meckern, weil es einfach keinen Sinn macht, hier das Zeichen '\0' einzubetten. Dazu später mehr.
|