Ich versuche Floats zu drucken. Obwohl Variadic-Funktionen nicht mit Gleitkommazahlen funktionieren, werden sie zu Double-Werten hochgestuft. Ich kann es schaffen, die Warnung loszuwerden, indem ich sie zu einem Doppelgänger mache. Beim Drucken der Ergebnisse auf einer PowerPC-Architektur wird ein falscher Wert angezeigt, wenn mit% f gedruckt wird. Warum?
Testcode:
%Vor%Ist das ein Fehler in der Werkzeugkette? Was ist die elegante Art, Floats zu drucken?
Oh, DUH! Ihr Gleitkommawert für x
wird korrekt berechnet, unabhängig davon, ob Ihre FPU dies tut oder ob Ihr Compiler dies in Software für Sie erledigt; Es ist nur so, dass Ihre printf()
Implementierung anscheinend %f
nicht als double
...
Befinden Sie sich auf einem eingebetteten System mit einer benutzerdefinierten printf()
Implementierung? Wenn ja, wurde es wahrscheinlich nicht geschrieben, um Fließkommazahlen zu behandeln, da Fließkommazahlen oft nicht einmal in eingebetteten Systemen verwendet werden, wo Programmierer oft entscheiden, Ganzzahlvariablen & amp; Festkomma-Arithmetik, die historisch viel viel schneller ist als Gleitkomma (und möglicherweise immer noch auf kleinen eingebetteten Systemen).
Oder eine andere Möglichkeit: Ihre benutzerdefinierte printf()
wird für die Verarbeitung von Fließkommazahlen geschrieben, behandelt aber %f
als float
, obwohl Ihr Compiler float
auf% co_de hochlädt % beim Weiterleiten von double
. Finden Sie Ihre benutzerdefinierte Implementierung & amp; fixiere es, um ...
vom Stapel als %f
anstelle von double
abzuziehen. (Ihre benutzerdefinierte Implementierung erhält möglicherweise eine Warnung, indem sie versucht, dies trotzdem zu tun, was die Benutzer möglicherweise gerade ignoriert haben.) Suchen Sie in diesem Code nach float
und ändern Sie ihn in va_arg(args,float)
. (Natürlich ist va_arg(args,double)
in diesem Beispiel mein eigener Variablenname für args
; Ihr Variablenname könnte anders sein.)