![]() |
Negativ beispiel zum ansehn ;)
Hallo Leuts.
Ich habe hier mal ein kleines Beispiel das ihr euch ansehen sollt. Es geht mir nicht um Optimierung, oder sonst was. Ich will eigentlich nur das ihr euch überlegt was das Programm ausgibt. Dann führt es aus und lasst euch überraschen. Der witz ist das Hoffentlich niemand so Programmiert. Denn die hier entstehenden Nebeneffeckte sind ja schon heftig.
Delphi-Quellcode:
Nice Cristmas to all
Unit Unit1;
Interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = Class(TForm) Button1: TButton; Procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } End; Var Form1: TForm1; x: integer; Implementation {$R *.DFM} Function f: integer; Begin x := x + 1; result := x; End; Function g: integer; Begin x := x * 2; result := x; End; Procedure TForm1.Button1Click(Sender: TObject); Begin x := 1; showmessage(inttostr(f + x * g)); End; End. Corpsman |
Re: Negativ beispiel zum ansehn ;)
Das Programm gibt alles mögliche aus, weil der Integer x nicht initialisiert wurde.
|
Re: Negativ beispiel zum ansehn ;)
Aha, interessant :stupid: .
Delphi-Quellcode:
@Corpsman: Hab richtig geraten ;) .
x := 1;
|
Re: Negativ beispiel zum ansehn ;)
Also ich sehe da ein X:= 1; in Button1Click.
Was das Ergebnis ist kann man nur raten. Das haengt davon ab wie der Compiler optimiert. |
Re: Negativ beispiel zum ansehn ;)
Sorry, Doppelpost... Firefox... :wall:
EDIT: Bei mir kommt übrigens 7 raus. ;) |
Re: Negativ beispiel zum ansehn ;)
Also wenn es euch interessiert, bei mir kommt auch 7 raus. :hi:
|
Re: Negativ beispiel zum ansehn ;)
OK ich sehe euch sind die Hoarschen Regeln nicht unbedint ein Begriff.
Ja 7 ist richtig. Compiliert ihr das unter Java dann kommt übrigens 10 raus. Hier noch ein negatives C++ Beispiel
Delphi-Quellcode:
Na ne Ahnung was hier rauskommt ?
x = 5;
x += x++; |
Re: Negativ beispiel zum ansehn ;)
Zitat:
|
Re: Negativ beispiel zum ansehn ;)
Zitat:
Das Verhalten sollte eigentlich bei allen C Compilern konsistent sein und überall 11 rauskommen. Ich sehe das als reguläres C an, kann man also so schreiben. Wenn du schreibst
Code:
dann muß 12 rauskommen.
x += ++x;
Was hast du denn erwartet ? Gruß Hagen |
Re: Negativ beispiel zum ansehn ;)
Zitat:
:gruebel: |
Re: Negativ beispiel zum ansehn ;)
10? Das kann doch gar ned stimmen... :gruebel:
|
Re: Negativ beispiel zum ansehn ;)
@corpsman
was für nebeneffekte sollen denn auftreten??? |
Re: Negativ beispiel zum ansehn ;)
@3_of_8: Da ist Visual C# aber anderer Meinung. :P
|
Re: Negativ beispiel zum ansehn ;)
x += x++; sollte das gleiche sein wie
x += x; x++; gleich x = x + x; x = x +1; 10 = 5 + 5; 11 = 10 +1; Ich habs im GCC probiert, kommt 11 und 12 raus. Es gibt aber unter den vielen Compilerswitches auch welche die diese Verhalten beeinflussen, und da wirds dann typisch C-doof ;) Zitat:
Das Beispiel sieht aber sehr konstruiert aus, ich habe bisher noch nie solchen Code im realen Einsatz gesehen. Gruß Hagen |
Re: Negativ beispiel zum ansehn ;)
Zitat:
|
Re: Negativ beispiel zum ansehn ;)
Zitat:
![]() Frohe Weihnachten :) Mike |
Re: Negativ beispiel zum ansehn ;)
@Andidreas
Du siehst hier gibt es jede menge Diskusionsgrundlage. Und es ist definitiv nicht Klar was nun rauskommen soll. Das Problem an der sache ist das die Sprache C , bzw Pascal an diesen stellen nicht eindeutig definiert sind und je nach Compiler anders interpretiert wurden. Da in den Gängigsten Tutorials in der Regel immer nur steht wie man dies und das macht, wollte ich euch eigentlich nur mal ein Beispiel zeigen wie ihr es bitte nicht machen sollt. Übrigens gibt es Sehr viele bei denen das so ist. Java, C, Pascal gehören definitiv auch dazu ;) Schöne Weihnacht noch. |
Re: Negativ beispiel zum ansehn ;)
Zitat:
|
Re: Negativ beispiel zum ansehn ;)
Eine Sprache, die so etwas zu lässt, gehört verboten. Ich bin froh, dass so etwas in Delphi nicht möglich ist.
|
Re: Negativ beispiel zum ansehn ;)
Wie war das, alles hat Vor- und Nachteile... :zwinker: :P
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz