Sprachen
»de« en 
Benutzerkonto
Benutzername

Passwort


Vergleiche und bedingte Anweisungen

Zahlen oder Wörter

Vergleichsoperationen mit Zahlen sind im allgemeinen schneller als mit Wörtern. Beim Vergleich von Zahlen muss nur eine Instruktion ausgeführt werden. Beim Vergleich von Wörtern muss in einer Schleife jeder Buchstabe einzeln verglichen werden.

Falls Zahlen im Sourcecode zu unübersichtlich sind ist es möglich mit #define Statements Wörtern Zahlen zuzuordnen. Damit kann der Programmierer im Programmcode Wörter benutzen. Der Preprocessor wandelt diese in entsprechende Zahlen um die dann in den Programmcode eingebettet werden.

Ein Beispiel:

int operation;

#define DELETE 1
#define OPEN 2
#define RENAME 3

operation=DELETE;

switch(operation)
 {
 case DELETE:
  do_delete();
  break;
 case OPEN:
  do_open();
  break;
 case RENAME:
  do_rename();
 }

Dies ist für den Compiler identisch zu folgendem code und somit viel schneller als ein Textvergleich mit strcmp(). Die Wörter DELETE,OPEN und RENAME werden noch vor der Kompilierung durch die Zahlen 1, 2 und 3 ersetzt.

int operation;

operation=1;

switch(operation)
 {
 case 1:
  do_delete();
  break;
 case 2:
  do_open();
  break;
 case 3:
  do_rename();
 }

Reihenfolge der Optionen in switch()-statements

Ein Beispiel:

int jahrgang;

...
switch(jahrgang)
 {
 case 1990:
  function_1990();
  break;
 case 1991:
  function_1991();
  break;
 case 1992:
  function_1992();
  break;
 case 1993:
  function_1993();
 }

Die switch() anweisung wird bei der ersten "break" Anweisung nach einem Treffer beendet. Es dauert also länger, alle Vergleiche bis zum letzten case-statement durchzugehen, als gleich beim ersten abzubrechen.

Deshalb ist es im obigen Beispiel ratsam, häufig auftretende Jahreszahlen zuerst zu behandeln, und seltene erst später. Somit kann man manche unnötige Vergleichsoperation einsparen.

Erwartet man also zur Laufzeit viele 1992er Jahrgänge und nur sehr wenige 1990er, so ist es ratsam obigen Code wie folgt umzuordnen:

int jahrgang;

...

switch(jahrgang)
 {
 case 1992:
  function_1992();
  break;
 case 1991:
  function_1991();
  break;
 case 1993:
  function_1993();
  break;  case 1990:
  function_1990();
 }

if und else if

Werden mehrere if()-Statements nacheinander behandelt, von denen nur eines zutreffen kann, so ist es ratsam, für alle ausser dem ersten "else if" statt nur "if" zu verwenden. Somit werden unnötige Vergleiche verhindert nachdem eine erfüllte Bedingung gefunden wurde.

Auch hier sollte auf die optimale Reihenfolge geachtet werden: Was häufiger zutrifft soll zuerst behandelt werden.


© 2001 by Stefan Heimers
Kürzlich geändert
VHF Band III Verstärker (de)
2017-09-23 18:02:58
Tips und Tricks (de)
2017-06-27 23:45:32
Dieser Server (de)
2016-06-06 18:21:57
Solartechnik (de)
2016-04-27 18:31:38
Empfangstechnik (de)
2016-04-21 15:05:07
Solarmodultest (de)
2016-04-05 20:36:34