Seite 1 von 2
Seiteneffekte
Verfasst: Do Feb 05, 2009 7:50 pm
von soufian88
Was sind eigentlich Seiteneffekte ?
Ich hab schon in google nachgeschaut aber da gibt es irgendwie keine richtige Antwort.
Re: Seiteneffekte
Verfasst: Do Feb 05, 2009 8:01 pm
von Dirty Oerti
Oha.
Seiteneffekte in welchem Zusammenhang.
Nicht-informatisch kann ich dir sagen, dass Seiteneffekte etwas sind, was nebenher wegen einem Ereignis passiert.
Ich bin mir aber fast sicher, dass du das nicht meinst...
Wo hast du denn davon gehört, bzw in welchem Zusammenhang?
Re: Seiteneffekte
Verfasst: Do Feb 05, 2009 8:04 pm
von soufian88
Ich verstehe nicht was seiteneffekt bedeutet im zusammenhang mit der if anweisung
Re: Seiteneffekte
Verfasst: Do Feb 05, 2009 8:07 pm
von +Fuss+
Gegooglet, Seiteneffekte falsch geschrieben (nur ein "f") und gefunden:
http://www.mi.uni-koeln.de/c/mirror/f7a ... fects.html
Das müsste es eigentlich sein.
Ich hoffe du kannst damit etwas anfangen.
MfG Fuss
Re: Seiteneffekte
Verfasst: Do Feb 05, 2009 8:44 pm
von Dirty Oerti
Cool, den Begriff kannte ich auch nicht.^^
Bzw, ich wusste nicht, das es dafür einen eigenen Begriff gibt
Auch was gelernt.

Re: Seiteneffekte
Verfasst: Do Feb 05, 2009 9:07 pm
von tutorials.at
Re: Seiteneffekte
Verfasst: Do Feb 05, 2009 9:23 pm
von soufian88
jep der kommt auch in diesen Tutorial vor.
Re: Seiteneffekte
Verfasst: Fr Feb 06, 2009 12:55 am
von Xin
soufian88 hat geschrieben:Was sind eigentlich Seiteneffekte ?
Ich hab schon in google nachgeschaut aber da gibt es irgendwie keine richtige Antwort.
Ein Seiteneffekt ist alles, was passiert, obwohl es nicht das Bedürfnis des Ausführenden war.
Seiteneffekte lassen sich gelegentlich nicht verhindern, also muss eine Software sich dagegen absichern.
Beispiel: es laufen mehrere Prozesse, die alle auf die gleichen Bank Daten zugreifen. Kunde 1 hat 100 Euro auf dem Konto, Kunde 2 hat 200 Euro auf dem Konto und überweist 100 Euro an Kunde 1. Gleichzeitig überweist Kunde 1 50 Euro an Kunde 3.
Überweisung 1 liest den Kontostand von Kunde 2 aus: 200 Euro, zieht 100 Euro ab und speichert den Kontostand neu ab. Nun liest sie den Datensatz von Kunde 1: 100 Euro.
Überweisung 2 beginnt und liest den Datensatz von Kunde 1 aus: 100 Euro. 50 Euro werden abgezogen und gespeichert. Kunde 1 hat den Kontostand 50 Euro.
Überweisung 1 geht weiter: auf die ausgelesenen 100 Euro werden 100 Euro addiert. Der neue Kontostand von Kunde 1 ist damit 200 Euro, dieser wird gespeichert und überschreibt den veränderten Kontostand von 50 Euro.
Datensätze, die von mehreren Prozessen geschrieben werden können, können durch ungünstige Verkettungen verkehrt geschrieben werden. Hier tritt ein Seiteneffekt auf (das Überschreiben eines Ergebnisses, ohne die Veränderung beachtet zu haben). Das Programm hat eine Racing-Condition: Je nach Ausführungzeitpunkt der beiden Prozesse können unterschiedliche Ergebnisse auftreten.
Überweisungen müssen durch einen Mutex zu atomaren, nicht unterbrechbaren Anweisungen gezwungen werden, um Seiteneffekte zu verhindern.
Re: Seiteneffekte
Verfasst: Fr Feb 06, 2009 10:13 am
von Kerli
Am größten ist die Gefahr zu Seiteneffekten aber bei Makros, da sie vor allem teilweise sehr schwer nachzuvollziehen sind. Schau dir einmal folgendes Beispiel an:
Code: Alles auswählen
#define MIN(a,b) ( (a < b) ? (a) : (b) )
// ...
int a = 1, b = 1;
printf("min(2,2)=%d\n",MIN(++a,++b));
printf("a=%d, b=%d\n", a, b);
Was glaubst du gibt dieser Code aus?
Zuerst wird '++a' mit '++b' verglichen. Da a und b den den gleichen Wert von 2 erhalten gibt dieser Vergleich falsch bzw 0 zurück. Deshalb wird der Teil (b) zurückgegeben. Da in einem Makro aber alle "Parameter" ersetzt werden und nicht die nur dir Werte übernommen werden, wird aus (b) (++b). Der Rückgabewert deshalb vor der Rückgabe noch um 1 erhöht. Die Ausgabe wird also lauten:
Und genau so etwas nennt man Seiteneffekt und sollte so gut wie möglich vermieden werden. Deshalb sollte man auch in Funktions/Makroaufrufen oder zb if-Abfragen wenn man nicht genau weiß vermeiden den Inkrement oder Dekrementoperator zu verwenden, da man oft nur sehr schwer erkennen kann wie oft er aufgerufen wird.
Re: Seiteneffekte
Verfasst: Fr Feb 06, 2009 11:00 am
von soufian88
#define MIN(a,b) ( (a < b) ? (a) : (b) )
Was hat die Zeile auf sich? zumindest die hälfte der Zeile verstehe ich