Seiteneffekte

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Seiteneffekte

Beitrag von Xin » Fr Feb 06, 2009 11:06 am

soufian88 hat geschrieben:
#define MIN(a,b) ( (a < b) ? (a) : (b) )
Was hat die Zeile auf sich? zumindest die hälfte der Zeile verstehe ich
Es ist ein Makro, dass aus

Code: Alles auswählen

int min = MIN( 1, 2 );
folgenden Sourcecode erstellt

Code: Alles auswählen

int min = ( ( 1 < 2 ) ? ( 1 ) : ( 2 ) );
Dieser wird dann kompiliert.

Hier wird a und b wirklich per Copy and Paste eingesetzt, es werden eben nicht - wie bei Funktionsaufrufen - die Werte ausgerechnet und übergeben, sondern es wird der pure Text übertragen.
Also aus

Code: Alles auswählen

int min = MIN( ++a, ++b );
wird

Code: Alles auswählen

int min = ( ( ++a < ++b ) ? ( ++a ) : ( ++b ) );
Wenn das kompiliert wird, wird die Inkrementierung für a, b und zusätzlich ein zweites mal für das kleinere der beiden Elemente durchgeführt. Dieses zusätzliche für das kleinere Element ist allerdings eher ungewünscht: ein Seiteneffekt.

Für alle Fälle: Der ?: Operator ist eine Unterscheidung: ( Bedingung ) ? (Wert, wenn Bedingung wahr) : (Wert, wenn Bedingung falsch)
Also eine Art if ... else ... in Kurzschreibweise.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Seiteneffekte

Beitrag von soufian88 » Fr Feb 06, 2009 11:42 am

Danke euch bei mir hat es ein ordentlichen :idea: gemacht. :D
C ( Durchschnittlich ) C++ (am Lernen)

Antworten