Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » [C] Float-Suffix veraltet ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.09.2007, 21:11 Uhr
cfx



Hallo,
ich habe einfach mal etwas mit Suffixen rumgespielt und musste doch feststellen, dass der GCC in Version 4.1.2 'f' bzw. 'F' einfach ignoriert.

printf ("%p", 2.3f); liefert nämlich folgende Warnung:
Format »%p« erwartet Typ »void *«, aber Argument 2 hat Typ »double«

Hat einer eine Idee, warum ?
'l' bzw. 'L' für long double funktioniert ja auch.

Danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.09.2007, 23:46 Uhr
Hans
Library Walker
(Operator)


Hi,

soweit ich weis, ist %p für Zeiger, (pointer) und die sind immer int. Vielleicht versuchst Du es mal so: printf ("%p", &2.3f);
wobei ich allerdings auch nicht weis, wozu das gut sein könnte...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.09.2007, 23:03 Uhr
cfx



Ähm, ich glaube, du hast mich da etwas falsch verstanden...
Dass %p einen Zeiger verlangt, ist mir schon klar, aber es ging mir hier auch nicht um die Korrektheit des Codes, sondern um die Compiler-Warnung.

...und die sagt ja wohl eindeutig aus, dass 2.3f als double interpretiert wird - also im Grunde kann man das 'f' dann auch weglassen, da der Wert standardmäßig sowieso ein double-Wert ist.

Du kannst ja auch gerne noch etwas mit Suffixen bei Ganzzahlen herumspielen ('u' und 'l' z. B.) - da wird dir auffallen, dass der Compiler diese auch beachtet - bloß bei float macht er's halt nicht (mehr).

Scheint einfach wegrationalisiert worden zu sein.
In den Handbüchern steht aber überall (noch) drin, dass es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.09.2007, 00:31 Uhr
Hans
Library Walker
(Operator)



Zitat von cfx:
Ähm, ich glaube, du hast mich da etwas falsch verstanden...
Dass %p einen Zeiger verlangt, ist mir schon klar, aber es ging mir hier auch nicht um die Korrektheit des Codes, sondern um die Compiler-Warnung.


Hi,

also da kann ich auch nicht weiter helfen, weil ich keinen GCC habe. Steht denn in der Hilfe nichts dazu drin?


Zitat:

...und die sagt ja wohl eindeutig aus, dass 2.3f als double interpretiert wird - also im Grunde kann man das 'f' dann auch weglassen, da der Wert standardmäßig sowieso ein double-Wert ist.

Du kannst ja auch gerne noch etwas mit Suffixen bei Ganzzahlen herumspielen ('u' und 'l' z. B.) - da wird dir auffallen, dass der Compiler diese auch beachtet - bloß bei float macht er's halt nicht (mehr).


Was gibt er denn aus, wenn Du das mal komplett übersetzen und laufen lässt?
Im übrigen: Das er bei den Suffixen für ganze Zahlen nicht meckert, ist doch irgendwo klar, meine ich zumindest. - Ein Zeiger ist ja letztlich auch nichts anderes, als eine ganze Zahl.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.09.2007, 01:06 Uhr
0xdeadbeef
Gott
(Operator)


2.3f ist laut Standard in der Tat ein float-Literal. Seltsam...sieht mir nach einem Compiler-Bug aus. Upgraden auf 4.2.1, sehen ob ers immer noch falsch macht?

Ich werd das später mal nachprüfen, hab im Moment keinen Compiler zur Hand.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.09.2007, 08:39 Uhr
Tommix



Hallo,
nein das ist kein Bug. Wenn die Typen der Parameterliste der Funktion nicht per Deklaration vorgegeben sind, wie bei Ellipsen der Fall, wird float immer nach double konvertiert. Daher auch die Merkwürdikeit, daß es

C++:
double d = 1.0;
printf("%f", d);


aber

C++:
scanf("%lf", &d);


heißt, was auf den ersten Blick inkonsistent erscheint.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.09.2007, 15:12 Uhr
cfx



Okay, danke.

Andere Frage: Sind Suffixe sinnvoll ?
(Ich bin der Meinung, man sieht sie relativ selten)

Dieser Post wurde am 19.09.2007 um 15:17 Uhr von cfx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: