Embedded-Software-Development

Lexikalische Grundlagen der C-Programmierung

Seite: 2/2

Anbieter zum Thema

Schlüsselwörter in C

C hat die folgenden 32 Schlüsselwörter (reserved words, keywords):

auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while

Identifier (Bezeichner) in C

Bezeichner in C (identifier), sonst auch schlicht Namen genannt, werden folgen dermaßen gebildet (als regular expression (regulärer Ausdruck) in Unix-Notation): [A-Za-z_][A-Za-z_0-9]*. d.h. Buchstabe oder Unterstrich optional gefolgt von beliebiger (auch Null) Folge eben dieser, inklusive der Ziffern.

Bezeichner dürfen nicht mit einer Ziffer beginnen, Groß- und Kleinbuchstaben sind als verschieden zu werten. Bezeichner dürfen nicht aus der Menge der o.g. Schlüsselwörter sein (oder aus der Menge von Namen, die für die Standardbibliothek reserviert sind, sie müssen sich mindestens in den ersten 31 Zeichen unterscheiden. Mit Unterstrich beginnende Namen sind für das System reserviert und sollten nicht verwendet werden. Bezeichner mit externer Bindung (d.h. Weiterverarbeitung durch Linker etc.) können weiteren Beschränkungen unterliegen.

Konstanten

C kennt vier Hauptgruppen von Konstanten:

  • Ganzzahlkonstanten Dezimal-, Oktal- oder Hex-Darstellung
  • Gleitpunktzahlkonstanten mit Dezimalpunkt und/oder Exponentkennung
  • Zeichenkonstanten eingeschlossen in ‚. . . ‚
  • Zeichenkettenkonstanten eingeschlossen in „. . . „

Numerische Konstanten sind immer positiv, ein etwa vorhandenes Vorzeichen gilt als unärer Operator auf der Konstanten und gehört nicht dazu. Ganzzahlkonstanten sind vom Typ int, wenn das nicht ausreicht, vom Typ long, wenn auch das nicht ausreicht, vom Typ unsigned long. Man kann die größeren Typen auch durch Anfügen von Suffixen erzwingen, wie aus der folgenden Übersicht hervorgeht:

  • Dezimalziffern 0 1 2 3 4 5 6 7 8 9
  • Oktalziffern 0 1 2 3 4 5 6 7
  • Hexziffern 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
  • 0 Die Konstante 0 (Null)
  • l L Ganzzahlsuffix für long (Achtung, Verwechslungsgefahr l ['kleines L'] mit 1!)
  • u U Ganzzahlsuffix für unsigned
  • f F l L Gleitpunktzahlsuffix für float bzw. long double (s.o.)
  • e E Gleitpunktzahlkennung für Exponent

Beginnt die Ganzzahlkonstante mit 0x oder 0X, so liegt Hexnotation vor und es folgen eine oder mehrere Hexziffern. Dabei stehen A-F bzw. a-f für die Werte 10...15. Beginnt andernfalls die Ganzzahlkonstante mit einer 0, so liegt Oktalnotation vor und es folgen eine oder mehrere Oktalziffern, andernfalls liegt Dezimalnotation vor.

Gleitpunktzahlkonstanten sind immer vom Typ double, falls nicht durch Suffix als float oder long double gekennzeichnet. Zur Erkennung müssen mindestens der Dezimalpunkt oder die Exponentkennung vorhanden sein.

Eine Zeichenkonstante (character constant) ist ein in einfache Hochkommata eingeschlossenes Zeichen aus dem Zeichensatz oder seine (auch mehrere Zeichen umfassende) Ersatzdarstellung. Die Betrachtung sog. wide character constants, sowie sog. multi byte character constants unterbleibt hier. Zeichenkonstanten sind vom Typ int, dürfen aber nicht wertmäßig größer als der entsprechende Typ char sein.

Eine Zeichenkettenkonstante (string constant) ist eine in sogenannte doppelte Anführungszeichen eingeschlossene Zeichenkette auf einer Zeile. Sie darf alle Zeichen des Zeichensatzes, inklusive etwaiger Ersatzdarstellungen, und (dann signifikanten) Leerraum enthalten. Nur durch Leerraum getrennte Zeichenketten werden vom Präprozessor zusammengefügt und gelten als eine Zeichenkette. Man kann eine Zeile auch umbrechen, indem man sie mit einem Rückschrägstrich terminiert. Die auf diese Weise fortgeführte Zeile gilt dann als eine logische Zeile.

Zeichenketten werden standardgemäß als array of char von niederen zu höheren Adressen mit terminierendem Nullwert im Speicher abgelegt. Ihre Speichergröße ist daher immer um 1 größer als die Größe, die der Anzahl der enthaltenen Zeichen entsprechen würde. Das sind also die allseits verbreiteten so genannten C-Strings. Der Nullwert dient als Terminierungsmarke für alle Routinen der Standardbibliothek und kann folglich im String selbst nicht vorkommen. Der terminierende Nullwert gehört somit nicht zu den Zeichen des Strings und wird folglich bei Ermittlung seiner Länge auch nicht mitgezählt.

Eine Zeichenkette als Typ array of char zu sehen, nimmt man aber nur bei der Initialisierung von Arrays oder der Anwendung des sizeof-Operators wahr. Bei den meisten Verwendungen treten jedoch sofort die üblichen syntaktischen Umwandlungen von C in Kraft, und man sieht nur noch einen Zeiger auf das erste Zeichen, also den Typ char *, über den man dann alle weitere Verarbeitung steuern kann.

Dies stellt einen Überblick über die lexikalischen Elemente der Programmiersprache C dar; also eine Zusammenfassung des von C aufgefassten und interpretierbaren Wortschatzes. Um hiermit Ausdrücke, Anweisungen oder Funktionen umsetzen zu können, kommt es auf den richtigen kontextuellen Zusammenhang dieser lexikalischen Elemente an. Dies wid demnach auch als die Syntax" von C bezeichnet. Auf diese syntaktischen Elemente von C gehen wir in einem anderen Beitrag näher ein.

Hinweis: Dieser Beitrag ist ein Auszug aus dem Handbuch „Embedded Systems Engineering“. Dieses ist auch als kostenlose PDF-Version in voller Länge auf ELEKTRONIKPRAXIS.de verfügbar.

Dieser Beitrag, mit Ausnahme der ersten beiden und des letzten Absatzes, ist Copyright © Bernd Rosenlechner 2007-2010. Dieser Text kann frei kopiert und weitergegeben werden unter der Lizenz Creative Commons – Namensnennung – Weitergabe unter gleichen Bedingungen (CC – BY – SA) Deutschland 2.0.

* Prof. Dr. Christian Siemers lehrt an der Technische Universität Clausthal und arbeitet dort am Institut für Elektrische Informationstechnik (IEI).

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

(ID:45389501)