Laufzeitwerte in C
Das folgende Programm gibt eine mehr oder weniger zufällig ausgewählte int-Zahl zwischen »0« (einschließlich) und <stdlib.h> »RAND_MAX« (einschließlich) aus.
main.c
#include <stdio.h> /* printf */
#include <stdlib.h> /* rand */int main( void )
{ printf
( "%d\n", rand() ); }stdout
41
Die zur Laufzeit stattfindende Auswertung eines Funktionsaufrufs ist ein Vorgang (Geschehen, Ablauf), während der Funktionsaufrufausdruck ein Teil des Quelltextes ist.
Am Vorgang der Auswertung des Ausdrucks
- rand()
ist noch besonders zu bemerken, daß es sich zwar um eine eindeutig bestimmte Funktion handelt, ihr Wert aber nicht bestimmt ist. Er kann bei jeder Ausführung der Funktion ein anderer sein. (Das heißt: Die Auswertung dieses Ausdrucks kann jedes Mal einen anderen Wert ergeben.)
Es ist möglich, daß ein Programm wie das obige immer dasselbe ausgibt (wie beispielsweise »41«), aber wir werden später sehen, wie man die Funktion »rand« so aufrufen kann, daß sich auch andere Werte ergeben können. Daher kann man schon sagen, daß ein Aufruf von »rand« eine mehr oder weniger zufällig ausgewählte int-Zahl zwischen »0« (einschließlich) und <stdlib.h> »RAND_MAX« (einschließlich) ausgibt, auch wenn wir erst etwas später erfahren werden, wie man es verhindern kann, daß immer die gleiche Zahl ausgegeben wird.
Hierin unterscheidet sich das Programmieren von der Mathematik, wo ein Term wie ‹cos( 0 )› immer den gleichen Wert hat (also immer einen bereits durch diesen Term vollständig und eindeutig bestimmten Wert).
Dynamische und statische Eigenschaften
Etwas das zum Laufzeitgeschehen gehört, insbesondere etwas, das erst während des Programmablaufs festgelegt wird, nennt man auch dynamisch.
Etwas das zum Quelltext gehört, insbesondere etwas, das schon durch den Quelltext festgelegt ist, nennt man auch statisch.
Der Typ eines Ausdrucks ist statisch. Er ist bereits durch den Quelltext festgelegt. Dadurch können Typfehler schon während der Compilierung erkannt und gemeldet werden, so daß ein Programmierer sie erkennen kann, bevor ein Programm an Kunden ausgeliefert wird. Dazu sagt man auch, C habe ein statisches Typsystem.
Der Wert eines Ausdrucks hingegen ist dynamisch. Es ist möglich, daß er erst zur Laufzeit festgelegt wird. Dadurch kann ein Programm flexibler an die Umstände während seiner Ausführung angepaßt werden. Andererseits ist es dadurch möglich, daß Fehler, die nur bei bestimmten Werten auftreten, vom Programmierer nicht bemerkt werden, weil dieser nicht alle möglichen Werte durchprobieren kann.
getchar
Die Funktion »getchar« liefert die Kennzahl eines eingegebenen Zeichens. Falls nach dem Start eines Programms noch kein Zeichen eingegeben wurde, wartet das Programm bei der der Auswertung von »getchar()« zunächst auf die Eingabe eines Zeichens, welche in der Regel noch mit der folgenden Betätigung der Eingabetaste bestätigt werden muß.
- Die Eingabetaste
.------------------.
| |
| |
| | |
| <----' |
'----. |
| |
| |
| |
| |
| |
| |
| |
'-------------'
Jedes Schriftzeichen hat in einer C -Implementation eine bestimmte Kennzahl, durch welche es eindeutig identifiziert wird, das Schriftzeichen »G« hat beispielsweise bei vielen Implementationen die Kennzahl 71. Die Zuordnung von Schriftzeichen zu Kennzahlen wird aber nicht durch C, sondern durch die Implementation festgelegt. Im folgenden wird zur Vereinfachung manchmal eine Zuordnung von Kennzahlen zu Schriftzeichen gemäß der folgenden Tabelle angenommen.
- Tabelle
Zahl Zeichen Beschreibung
10 Zeilenende
13 Wagenruecklauf48 0 Ziffer 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
57 9
65 A
66 B
67 C
68 D
69 E
70 F
71 G
72 H
73 I
74 J
75 K
76 L
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z97 a
98 b
99 c
100 d
101 e
102 f
103 g
104 h
105 i
106 j
107 k
108 l
109 m
110 n
111 o
112 p
113 q
114 r
115 s
116 t
117 u
118 v
119 w
120 x
121 y
122 z
Das folgende Programm erlaubt es die Kennzahl eines eingegebenen Zeichens auszugeben.
main.c
#include <stdio.h> /* printf, getchar */
int main( void )
{ printf
( "%d\n", getchar() ); }- Konsole
A
65- Konsole
B
66