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
 

A (OPERATOR)= B steht für A = A (Operator) B

Um es etwas verständlicher darzustellen:
 

Vereinfachung steht für
A += B
A = A + B
A -= B
A = A - B
A *= B
A = A * B
A /= B
A = A / B

Das kann man mit allen Operatoren machen. Auch mit denen, die wir später noch kennenlernen werden.
 
 
 
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++ )

{

    (Schleifenkörper)
}

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


 
 
 
Übungsbeispiel

Als kleine Übung möchte ich Sie bitten, sich folgende Unterroutine aus Beispielprogramm eines Taschenrechners anzuschauen. Es ist nicht wichtig, ob sie die Funktionen der einzelnen Variablen verstehen. Es ist wichtig, das sie ein Gespür entwickeln, was mit den enizelnen Variablen geschieht.
 

double ausdruck (void
{
    extern char *str; 
    double zahl;
    zahl=operand();
    switch(*str)
    {
      case ')': 
        *str++;
        break;

      case '*':
        *str++; 
        zahl *= ausdruck();
        break; 

      case '/':
        *str++;
        zahl /= ausdruck();
        break;

      case '+': 
        *str++; 
        zahl += ausdruck();
        break;

      case '-':
        *str++;
        zahl -= ausdruck();
        break; 

      default :
        break;
      }

    return zahl; 
    }

 
 
 
 
...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!