Teil 9 : Vereinfachungen, oder das Salz in der C-Suppe |
Wenn man ein Programm schreibt, fragt man sich unweigerlich, ob man
bestimmte Anweisungen nicht einfacher darstellen kann. Nach dem zigsten
" X = X+1 " möchte man es am liebsten nicht mehr sehen.
Bei der Entwicklung von C war man sich dessen durchaus bewußt und
versuchte dies auch einzubeziehen, da die Programmierer ja auch nicht unbedingt
den Drang verspürten alles doppelt und dreifach zu schreiben.
Zuweisungen |
Nehmen wir den einfachen Fall einer Variablenerhöhung um einen
bestimmten Wert an.
A = A + 10 |
Vereinfacht wird das Ganze durch folgenden Ausdruck
A += 10 |
Diese Vereinfachungen arbeiten nach dem folgenden Schema
|
Um es etwas verständlicher darzustellen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Das kann man mit allen Operatoren machen. Auch mit denen, die wir später
noch kennenlernen werden.
bedingte Zuweisungen |
Man kann bei kurzen if-else-Ausdrücken diese auch folgendermaßen
abkürzen.
if ( Bedingung ) a = Wert1;
else a = Wert2; |
a = (( Bedingung ) ? Wert1 : Wert2 ); |
Wie man sehen kann werden bei beiden Möglichkeiten einer Variablen,
abhängig von der Bedingung, entweder wenn die Bedingung wahr
ist, der eine (Wert1) oder, wenn sie falsch ist, der andere Ausdruck
(Wert2) zugewiesen.
Postfix-Operatoren |
Möchte man einen Variablen Wert nach einer Aktion, z.B. einem Schleifenablauf,
um eins erhöhen, so erfolgt dies mit derAnweisung
A++ |
Steht der Ausdruck alleine da, wird A ums 1 erhöht, da ansonsten
keine Zuweisung erfolgt. Es ist das Gleiche wie
A += 1 |
Steht der Ausdruck in einer Zuweisung,
A = B++ |
... so ist es das Gleiche, wie
A = B
B = B + 1 |
Wie man hier sehen kann, wird B erst nach der Zuweisung erhöht!
In einer Schleife mit der Zählvariablen i sieht das dann folgendermaßen
aus.
for ( i = 0 ; i < 5 ; i++ )
{
|
Um die Funktionsweise zu verdeutlichen, schauen wir uns an, wie die
Schleife abgearbeitet wird. Als erstes wird i mit 0
initialisiert und der Schleifenkörper solange abgearbeitet, solange
i
< 5 gilt. Beim ersten Aufruf von i++ wird der
Wert übergeben, den i hat und erst danach wird
i um
1 erhöht! Beim zweiten Durchgang hat i
den Wert 1 der i im ersten Durchgang nachträglich
zugewiesen wurde. Nach dem selben System arbeitet auch
A-- |
wobei hier A um eins reduziert wird.
A = B-- |
steht also für
A = B
B = B - 1 |
Prefix -Operatoren |
Hier werden die zugeordneten Variablen vor der Wertübergabe erhöht/reduziert.
A = ++B |
steht folglich für
B = B+ 1
A= B |
Analog dazu gibt es natürlich auch
A = --B |
welches folgenden Effekt hat
B = B - 1
A = B |
Typendefinition mit Typedef |
Wenn wir bisher structs oder unions erzeugten, so hatten
unsere neuen Datenstrukturen jeweils beim Erzeugen der Variablen des Type
den ganzen Rattenschwanz der Deklaration davor. Durch den Deklarationsbefehl
typedef
wird einer Datenstruktur ein eigener Typenbezeichner zugewiesen.
typedef int Laenge; |
Hier wird der Variablentyp Laenge synonym zu int benutzt. Damit
kann man Strukturdefinitionen z.B. vereinfachen. Im foglenden Beispiel
erzeugen wir die neue Typendefinition Feld.
struct test
{ int laenge;}; typedef struct test Feld; |
Nun können wir im folgenden Programm anschließend den so
definierten neuen Typ benutzen.
Feld neu;
neu.laenge = 10;
|
So könnte man z.B. einen Typen definieren, der aus einem struct
test ein Feld beliebiger Größe erzeugt.
Übungsbeispiel |
Als kleines Übungsbeispiel sollten sie versuchen das folgende Programm
zu verstehen.
void main (void)
int b=2; printf ("\n a = %d \t b = %d \n",a,b); a += b++;
a += ++b;
|
Versuchen sie zu nachzuvollziehen, warum die folgenden Ergebnisse geliefert werden.
...das Obligatorische |
Autor: Sebastian Cyris PCDBascht@aol.com
Dieser C-Kurs dient nur zu Lehrzwecken! Eine Vervielfältigung ist ohne vorherige Absprache mit dem Autor verboten! Die verwendete Software unterliegt der GPL und unterliegt der Software beiliegenden Bestimmungen zu deren Nutzung! Jede weitere Lizenzbestimmung die der benutzten Software beiliegt, ist zu beachten!