17.01.2014 Aufrufe

Softwareentwicklung in C - ASC

Softwareentwicklung in C - ASC

Softwareentwicklung in C - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

36 4. Datentypen und Variablen<br />

nur durch das Wissen um den return-Wert von sizeof bekannt, dass es etwas<br />

vom Typ <strong>in</strong>t se<strong>in</strong> wird. Der genaue Wert aber muss erst ausgerechnet<br />

werden. Dementsprechend wird zur Laufzeit zuerst sizeof aufgerufen, und<br />

der resultierende <strong>in</strong>t-Wert wird als zweiter Parameter an pr<strong>in</strong>tf übergeben.<br />

Nehmen wir als Beispiel die erste pr<strong>in</strong>tf Zeile her: Hier ist der erste<br />

Parameter beim Aufruf der Output-Str<strong>in</strong>g, und der zweite Parameter ist 1.<br />

E<strong>in</strong>e Frage bleibt noch offen: Wie kommt die Zahl, die ja als zweiter<br />

Parameter übergeben wird, mitten <strong>in</strong> den Output-Str<strong>in</strong>g h<strong>in</strong>e<strong>in</strong>? Dies wird<br />

erreicht durch den Platzhalter %d, der im Output-Str<strong>in</strong>g vorkommt. Die<br />

Funktion pr<strong>in</strong>tf ist so def<strong>in</strong>iert, dass sie e<strong>in</strong>e variable Anzahl von Parametern<br />

akzeptiert. Wie der dazugehörige Mechanismus funktioniert, ist an dieser<br />

Stelle belanglos, es reicht zu wissen, dass es bei pr<strong>in</strong>tf so ist, und dass dies<br />

nicht der Normalfall für Funktionen <strong>in</strong> C ist.<br />

Intern geht pr<strong>in</strong>tf den Str<strong>in</strong>g durch, der immer der erste Parameter se<strong>in</strong><br />

muss, und sucht nach Platzhaltern (die alle mit % gekennzeichnet s<strong>in</strong>d). Für<br />

jeden Platzhalter, der gefunden wird, erwartet pr<strong>in</strong>tf e<strong>in</strong>en Parameter, dessen<br />

Wert dann an dieser Stelle bei der Ausgabe e<strong>in</strong>gesetzt wird. Welcher<br />

Typ von diesem Wert erwartet wird, wird durch den Platzhalter bestimmt.<br />

Man sieht, dass auch dies wieder e<strong>in</strong>en Escape-Sequenz-Mechanismus darstellt,<br />

und wie unschwer zu vermuten ist, wird e<strong>in</strong> %-Zeichen <strong>in</strong> der Ausgabe<br />

dadurch erreicht, dass man im Str<strong>in</strong>g die Sequenz %% verwendet. Hier nun<br />

noch e<strong>in</strong>e kurze Liste der wichtigsten Platzhalter, e<strong>in</strong>e vollständige Liste und<br />

e<strong>in</strong>e Beschreibung aller Eigenarten bieten die Man-Pages zu pr<strong>in</strong>tf.<br />

Platzhalter steht für<br />

%d <strong>in</strong>t, Dezimaldarstellung<br />

%u unsigned <strong>in</strong>t, Dezimaldarstellung<br />

%o <strong>in</strong>t, Oktaldarstellung (nur unsigned!)<br />

%x <strong>in</strong>t, Hexadezimaldarstellung (nur unsigned!)<br />

%f double oder float<br />

%c char<br />

%s Str<strong>in</strong>g<br />

Ich möchte hier noch anmerken, dass sich durch die besonderen Eigenschaften<br />

des Output-Str<strong>in</strong>gs bei pr<strong>in</strong>tf die Bezeichnung Formatstr<strong>in</strong>g e<strong>in</strong>gebürgert<br />

hat. Diese Bezeichnung wird auch <strong>in</strong> der Folge hier Verwendung f<strong>in</strong>den.<br />

Vorsicht Falle: Bei der Verwendung von pr<strong>in</strong>tf muss sehr genau aufgepasst<br />

werden, denn die Anzahl der Parameter muss mit der Anzahl der<br />

Platzhalter im Formatstr<strong>in</strong>g übere<strong>in</strong>stimmen. Außerdem, und das s<strong>in</strong>d die<br />

allerhäufigsten Fehler, muss der durch den Platzhalter suggerierte Typ kompatibel<br />

zum tatsächlichen Typ se<strong>in</strong>. Alle Fehler, die man hierbei begeht,<br />

werden vom Compiler nicht bemängelt, denn dieser weiß ja nichts von den<br />

Eigenarten des Format Str<strong>in</strong>gs und kann dementsprechend ke<strong>in</strong>e passende<br />

Prüfung durchführen. Deshalb kann man sich sehr unangenehme Laufzeitfeh-

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!