1 ANSI - American National Standards Institute, die US-amerikanische Normungsbehörde, entspricht in etwa der DIN in Deutschland.

2 ASCII - American Standard Code for Information Interchange

3 In der Regel wird man das große L verwenden, da ein kleines l von einer 1 nicht immer leicht zu unterscheiden ist.

4 Beachten Sie bitte: trotz der mehreren zu tippenden Zeichen stehen hier einfache Hochkommata, denn das gesamte Gebilde steht in C für ein einzelnes Zeichen!

5 Vgl. hierzu den Abschnitt zu logischen Ausdrücken.

6 zu deutsch: Gipsverband

7 Unter einem Operator versteht man traditionell primär Rechenvorschriften wie + und -; im Rahmen der Programmierung sind Operatoren aber weiter gefaßt ähnlich wie Funktionen zu verstehen, nur daß die Operatoren mit einer anderen Syntax aufgerufen werden und in klassischen Programmiersprachen wie C oder Pascal nicht für eigene Datentypen neu definiert werden können. Dies ist in der objektorientierten Erweiterung C++ dagegen möglich.

8 Generell liefert eine arithmetische (Grundrechen-)Operation, die auf zwei Ganzzahloperanden wirkt, eine Ganzzahl zurück; ist mindestens ein Gleitkomma-Operand beteiligt, so liegt das Resultat in dem entsprechenden Gleitkommaformat vor.

9 Der Unterschied zwischen i++ und ++i wird später deutlich werden.

10 Häufig wird, wie hier, der Begriff Compiler für das Gesamtpaket bestehend aus C-Präprozessor, eigentlichem C-Compiler und ggf. noch dem Lader oder Linker verwendet.

11 Das Stichwort hierfür lautet Bedingte Compilierung.

12 Genau genommen sind es laut Standard maximal 512 Funktionen pro Quelltextdatei; dieser Wert ist aber in der Praxis akademisch, da größere Softwareprojekte stets auf zahlreiche Dateien aufgeteilt werden. Sh. hierzu auch den Abschnitt zu Makefiles im Anhang dieses Scripts.

13 Eine der (nicht objektorientierten) Erweiterungen von C++ gegenüber C ist auch die Einführung von Referenzen und Referenzparametern.

14 Diese Dateinamenendungen sind spezifisch für das jeweilige UNIX-System. Die hier genannten sind beispielhaft für ein Hewlett-Packard HP-UX System (Version 9.0).

15 EOF besitzt zwar üblicherweise den Wert -1, anständige C-Programme sollten jedoch besser die Konstante EOF verwenden um nicht von dieser Implementierung abhängig zu sein!

16 Die printf()-Formatierungen "%c" und "%d" in dem Beispiel bewirken, daß die Variable zeichen einmal als char, ein zweites Mal als integer (digit) ausgegeben wird.

17 Amerikanisch soll hierbei bedeuten, daß keine Umlaute, 'é', 'ß' und dergleichen berücksichtigt werden.

18 Ersatzweise genügt es auch, wenn Sie BASIC oder womöglich sogar COBOL kennen. Pascal wäre aber schon gut...

19 Insbesondere stürzt das C-Programm im Gegensatz zu der Erfahrung beim case-Konstrukt von Standard-Pascal auf keinen Fall ab!

20 Bei ANSI-C ist diese Anzahl auf 255 limitiert.

21 Dieses Verhalten ist das der globalen Variablen in Pascal.

22 Für die Leser und Leserinnen mit Assembler-Kenntnissen: Das mit AX bezeichnete Register besitzt die beiden ein Byte großen Komponenten AH (high byte) und AL (low byte). Entsprechendes gilt für die anderen Register eines Intel-80x86-kompatiblen Prozessors.

23 Diese Deklarationen stehen in der DOS-spezifischen Headerdatei include\dos.h.

24 Die Bit-Felder haben nichts mit einer bekannten Biersorte zu tun.

25 Daß die Speicheradressen, die hier auftauchen, so viel kleiner sind als die z.B. in arrays1.c aufgetretenen Werte, liegt daran, daß dieses Beispiel hier auf einem PC protokolliert wurde: die Speicheradressen sind natürlich systemabhängig!

26 Vgl. hierzu das nachfolgende Programmbeispiel pointer2.c.

27 So erlauben etwa auch Pascal oder Modula-2, nicht jedoch das klassische COBOL, rekursive Programmstrukturen.

28 Dem NULL entspricht bei Pascal NIL.

29 Die konkrete Gestalt des Datentyps FILE sieht bei jedem Compiler(hersteller) verschieden aus. Um sich ein Bild davon machen zu können wird nachstehend die FILE-Deklaration des Turbo C++ 3.0 Compilers von Borland gezeigt.

typedef struct
{

int level; /* fill/empty level of buffer */

unsigned flags; /* File status flags */

char fd; /* File descriptor */

unsigned char hold; /* Ungetc char if no buffer */

int bsize; /* Buffer size */

unsigned char *buffer; /* Data transfer buffer */

unsigned char *curp; /* Current active pointer */

unsigned istemp; /* Temporary file indicator */

short token; /* Used for validity checking */

} FILE; /* This is the FILE object */

Bei dem Hewlett-Packard HP-UX C++ Compiler zur UNIX-Betriebssystemversion 9.04 sieht die Deklaration von FILE so aus:

typedef struct

{

int __cnt;

unsigned char* __ptr;

unsigned char* __base;

unsigned short __flag;

unsigned char __fileL; /* low byte of file desc */

unsigned char __fileH; /* high byte of file desc */

} FILE;

30 Dies funktioniert auch beim PC-Betriebssystem MS-DOS in analoger Weise.

31 Das Dollarzeichen $ ist der übliche Prompter (die Eingabeaufforderung) der Bourne- oder Korn-Shell unter UNIX.

32 engl. bug - die Wanze, to debug - entwanzen, im Rahmen der Software-Entwicklung: den Programmcode von Fehlern befreien

33 Gerade in Pointern enthaltene ungültige Adressen sind eine der Hauptfehlerquellen größerer Programme, die mit dynamischer Speicherplatzallokierung arbeiten.

34 Diese Endlosschleife ist nicht zwingend, – dabei handelt es sich vielmehr um eine compilerabhängige Verhaltensweise. Übungsaufgabe für die Profis: woran liegt es, daß dieses Programm in der hier gezeigten Fassung in eine Endlosschleife gerät?

35 Die Firma Symantec hat in den frühen Neunziger Jahren die Firma Zortech übernommen, die einen der besten und traditionsreichsten C++ Compiler auf den Markt gebracht hat. Selbstverständlich liefern auch die anderen Compilerhersteller wie Borland, Microsoft oder Watcom entsprechende Debugger zu ihren Entwicklungssystemen an.

36 Solche sehr hardwarenahen Aspekte werden in der Regel hexadezimal, also im Sechzehnersystem, dargestellt.

37 Dies gilt jedenfalls solange der Compiler diese Konstruktion nicht optimiert.