a=b=c=d fehlverhalten?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Macintosh

Betreff: a=b=c=d fehlverhalten?

BeitragMo, Sep 27, 2010 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein kumpel und ich streiten uns grade darum, ob es ein fehler ist, das a nicht den wert von d enthält.
Ich bin der meineung es ist ein fehler, weil: stellt man das ganze in RPN notation um kann man genau erkennen das a am ende der wert von d zugewiesen wird. in C ist es auch so.

Mein kumpel meint aber das das nicht Falsch sei.

Es liegt ja warsch. daran das blitzmax das = für vergleichen UND zuweisung, anders als in z.B. C wo es noch das == gibt benutzt.
was stimmt nun. ist es ein fehler?
oder kann man das nicht so genau sagen?

Danke
Code: [AUSKLAPPEN]

local a,b,c,d

d = 15
a=b=c=d

print( a ) '0, ?

Xeres

Moderator

BeitragMo, Sep 27, 2010 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist mal wieder kein Bug sondern BlitzMax Standardverhalten, deine Vermutung mit dem UND stimmt. Das muss man in einzelne Befehle unterteilen soweit mir bekannt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Macintosh

BeitragMo, Sep 27, 2010 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe nicht gesagt, dass es ein Bug ist ^^ ich frage nur... aber es schaut so nach einer nebenwirkung aus ^^, die daher kommt das es kein == gibt

coolo

BeitragDi, Sep 28, 2010 7:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau dem ist auch so.

BlitzMax ist eben ein Basic Dialekt und hat daher (zum Glück) nicht die Eigenheiten von C geerbt.

Mal davon abgesehen, dass man auch in C solche Mehrfachzuweisungen meiden sollte (da sie schnell unübersichtlich werden) MUSS das in CMax so passieren, da es eben keine == gibt.


Sobald eine Zuweisung/Function/Keyword vom Compiler in der Zeile gesichtet ist, werden die darauffolgenden Zuweisungsoperatoren automatisch als Vergleichsoperatoren gesehen.
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

Hummelpups

BeitragMi, Sep 29, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
es gibt doch viele Situationen, wie auch die Reihenfolge der Abarbeitung von Funktionen in Parametern
die einfach nicht festgelegt sind, oder?

myfunc( func1, func2)

Ich glaube es ist nicht festgelegt
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

Xeres

Moderator

BeitragMi, Sep 29, 2010 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht festgelegt? Wie sollte man funktionierende Programme schreiben können, wenn das nicht festgelegt ist?
Der Compiler arbeitet von rechts nach links und von innen nach außen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

FireballFlame

Betreff: Re: a=b=c=d fehlverhalten?

BeitragSo, Okt 03, 2010 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Macintosh: Richtig, es kommt daher, dass sowohl Vergleich als auch Zuweisung das = benutzen. Das ist kein Fehlverhalten.

Genauer gesagt hast du bei deinem Code: [AUSKLAPPEN]
local a,b,c,d

d = 15
a=b=c=d

print( a ) '0, ?
eine Zuweisung zur Variablen a. Da solche Zuweisungen am Anfang der Zeile stehen und nicht irgendwo mittendrin, werden die restlichen = als Vergleichsoperatoren interpretiert.

Da auch nicht 3 Variablen gleichzeitig verglichen werden können, kommt dann praktisch das dabei heraus:
Code: [AUSKLAPPEN]
a = (b=c)=d


Heißt also: Dein Programm vergleicht b mit c und kriegt True, also eine (Integer-)1 heraus, weil beide 0 sind. Dann vergleicht es die 1 mit der 15 aus d und das Ergebnis, False, also 0, wird a zugewiesen Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group