wieso 0?
Es hat keinen Sinn, eine int-Variable mit %f auszugeben.
Der gcc würdigt das zumindest in der Einstellung -Wall mit
einer Warnung, die du offenbar ignorierst.
Mit %i oder %d wird int ausgegeben, mit %f, %e und %g
double (bzw. float).
Alles andere ist Unfug, und jede Ausgabe nichts, was ich als
unerwartet bezeichnen würde.
Es hatte Anfangs damit zutun, dass ich Probleme mit globalen und lokalen
Variablen hatte, die ich zufällig gleich benannt habe (debug-Variablen),
die sich dann überschatteten... Ich hab versucht das mit printf
auszugeben und da kamen richtig verwirrende Sachen bei raus...
Wenn der Compiler mir eine Warnung angezwigt hätte, wäre es ja kein
Problem gewesen, aber das hat er nicht (habe wohl einen zu alten (gcc))
Gruß, Yaro
Das Problem rührt daher, daß printf nicht weiß, was man ihm
übergibt - es sieht nur ein Bitmuster im Speicher und vermutet
anhand der Formatbeschreibung %f, daß es eine double ist.
Also wird das Bitmuster entsprechend ausgegeben.
Das ist etwa, als ob du einen Zeiger auf eine int hast, den
Zeiger mit einem cast zu einem Zeiger auf double vergewaltigst
und darüber aus dem Bitmuster der int eine double liest, die
dort nie stand.
Das hätte dann aber nicht zufolge, dass er 2345 (das, was ich vorher
schonmal ausgegeben hatte) ausgibt. Dann würde er mit großer
Wahrscheinlichkeit irgendeine andere Zahl, oder NaN ausgeben.
Scheint, dass das in der Funktion selber irgendwie anders gehandhabt
wird.
Gruß, Yaro
Das kann auch einfach daran liegen, daß ein float- bzw.
double-Parameter anders übergeben wird als eine int; z.B.
in einem FPU-Register (je nach Compiler).
Bei dem zweiten Aufruf mit der int wird das FPU-Register
dann nicht verändert und der Wert vom ersten Aufruf liegt
da noch.
Müsste man halt mal den erzeugten Maschinencode anschauen,
wenn es dich interessiert.
Sonderlich wichtig finde ich es aber eigentlich nicht,
weil es einfach falscher Quelltext ist und der je nach
Rechner und Compiler beliebigen Schwachsinn produzieren
darf.
So ähnlich wird es wohl sein.
Sich den erzeugten Code von printf anzuschauen sollte relativ
kompliziert werden, da printf relativ unübersichtlich (schon in C)
geschrieben ist.
Ich habe jetzt die Warnungen auch angeschaltet und sollte damit dann
keine größeren Probleme mehr bekommen.
Danke für deine Hilfe!
Gruß, Yaro
Bitte.
Du musst ja nicht den Code von printf anschauen, es reicht
der Aufruf in deinem Quelltext. Dazu habe ich aber heute auch
keine Lust, mehr ich habe noch Hunger.
Yaro schrieb:
> Es hatte Anfangs damit zutun, dass ich Probleme mit globalen und lokalen> Variablen hatte, die ich zufällig gleich benannt habe (debug-Variablen),> die sich dann überschatteten... Ich hab versucht das mit printf> auszugeben und da kamen richtig verwirrende Sachen bei raus...> Wenn der Compiler mir eine Warnung angezwigt hätte, wäre es ja kein> Problem gewesen, aber das hat er nicht (habe wohl einen zu alten (gcc))>> Gruß, Yaro
ich meine dafür gibt es -Wshadow dann wird dir das angezeigt, jedenfalls
gibts ein flag dafür