Embedded-Software-Development Lexikalische Grundlagen der C-Programmierung
Anbieter zum Thema
C ist in der Embedded-Entwicklung eine überaus beliebte Programmiersprache. Ihre immense Flexibilität und Ausdrucksstärke birgt aber auch größte Gefahren für unerfahrene oder leichtfertige Programmierer. Daher ist es essentiell, sich ausgiebig mit den Grundlagen der Sprache vertraut zu machen.

C stellt eine sehr populäre, imperative Sprache dar, die sich durch zahlreiche Eigenschaften auszeichnet. Sie verfügt über einen relativ kleinen Sprachkern und eine kompakte Notation. Sie besitzt einen reichhaltigen Satz von Standarddatentypen und einen ebenso reichhaltigen Satz von Operatoren. Sie verfügt über Zeiger (pointer), Felder und Verbünde für komplexe Datenstrukturen; und sie kann diese sehr gut auf Maschinenebene abbilden, was eine hohe Effizienz bei vergleichsweise wenig Code ermöglicht.
Alles andere, wie z. B. E/A oder Speicherverwaltung, ist in Standard-Bibliotheken untergebracht. Das alles zusammengenommen macht C zu einer kompakten und relativ einfach zu erlernenden Sprache, die auch in der Embedded-Entwicklung weite Verbreitung gefunden hat, und die sich gut zwischen unterschiedlichen Systemen portieren lässt.
Die immense Flexibilität und Ausdrucksstärke von C birgt aber auch größte Gefahren in der Hand eines unerfahrenen oder leichtfertigen Programmierers. C ist per se keine sichere Sprache – wenn auch bei entsprechender Programmierdisziplin (und bei Befolgung entsprechender Coding-Standards) C durchaus auch für sichere Embedded-Software geeignet ist.
Lexikalische Elemente: Der "Wortschatz" von C
Wie bereits erwähnt handelt es sich bei C um eine Imperative Programmiersprache. Ein imperatives Programm beschreibt eine Berechnung durch eine Folge von Anweisungen, die den Status des Programms verändern. Im Gegensatz dazu wird in einer deklarativen Sprache bzw.Programm eine Berechnung beschrieben, in der codiert wird, was berechnet werden soll, aber nicht wie. Mit anderen Worten: In imperativen Sprachen wie C werden die Algorithmen bis ins letzte Detail so beschrieben, wie sie auch auszuführen sind.
Um das Prinzip der imperativen Programmierung besser verständlich zu machen gehen wir in diesem (und weiteren) Grundlagenartikeln zu C auf die essentiellen Elemente der Programmiersprache ein. Den Anfang stellen die sogenannten lexikalischen Elemente dar; auf Syntax, Präprozessor und die Standardbibliothek wird später in gesonderten Artikeln eingegangen werden.
Der Grundzeichensatz von C
Der Grundzeichensatz für C-Quelltexte umfasst folgende sichtbare Zeichen:
- Großbuchstaben: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- Kleinbuchstaben: a b c d e f g h i j k l m n o p q r s t u v w x y z
- Dezimalziffern: 0 1 2 3 4 5 6 7 8 9
- Unterstrich: _
- Interpunktion: ! „ # % & ‚ ( ) * + , - . / : ; < = > ? [ \ ] ^ { | } ~
Zusätzlich können folgende Zeichen vorkommen:
- Space [Leerzeichen]
- BEL [Alarmglocke (bell)], mit der Ersatzdarstellung \a
- BS [Rückschritt (backspace)], mit der Ersatzdarstellung \b
- FF [Seitenvorschub (form feed)], mit der Ersatzdarstellung \f
- NL [Zeilenvorschub (newline)], mit der Ersatzdarstellung \n
- CR [Wagenrücklauf (carriage return)], mit der Ersatzdarstellung \r
- HT [Horizontaltabulator (horizontal tab)], mit der Ersatzdarstellung \t
- VT [Vertikaltabulator (vertical tab)], mit der Ersatzdarstellung \v
Es gibt auch Ersatzdarstellungen für die Anführungszeichen und zwei weitere Sonderzeichen zur Verwendung in Zeichen- und Zeichenkettenkonstanten. Hier dient der Rückschrägstrich dazu, die Sonderbedeutung des betreffenden Zeichens zu unterdrücken: \“, \‘, \?, \\. Um alle Zeichen des Zeichensatzes der Maschine darstellen zu können, gibt es ferner so genannte numerische Escape-Sequenzen (Ersatzdarstellungen):
- \d, oder \dd oder \ddd d (1...3) ist Oktalziffer (oft gebraucht: ‚\0‘, die Null)
- \xh oder \xhh oder . . . h (beliebige Anzahl) ist Hexadezimalziffer (0 bis 9, A bis F oder a bis f)
In Zeichen- und Zeichenkettenkonstanten (auch Literale genannt) können alle Zeichen des verwendeten Systems vorkommen.
White Space (Leerraum)
Als Leerraum (white space) gelten Leerzeichen, Zeilenvorschub, Wagenrücklauf, vertikaler und horizontaler Tabulator, sowie Seitenvorschub. Kommentare gelten auch als Leerraum. Leerraum wird syntaktisch ignoriert, außer in Zeichenketten- oder Zeichenkonstanten; er dient dazu, sonst aneinandergrenzende Wörter, Zeichen etc. zu trennen und den Quelltext für Menschen durch übersichtliche Gestaltung, z.B. Einrückungen nach Kontrollstruktur etc., gut lesbar zu machen.
Kommentare
Kommentare werden durch die Zeichenpaare /* und */ erzeugt. Alles, was dazwischen steht – auf einer Zeile oder mit beliebig vielen Zeilen dazwischen, gilt als Kommentar. Kommentare dürfen nicht geschachtelt werden.
/* Das ist zum Beispiel ein Kommentar
. . . und hier geht er immer noch weiter */
(ID:45389501)