Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Unterschied zwischen Cast und explizitem Konstantentyp

0 views
Skip to first unread message

Frank Terbeck

unread,
Dec 17, 2009, 4:40:34 AM12/17/09
to
Hallo.

Gibt es einen Unterschied zwischen:

float f;
f = (float)1.234;

und

float f;
f = 1.234f;

Natᅵrlich sind das verschiedene Konstrukte. Was mich jedoch
interessiert ist, ob es fᅵr den erzeugten Code einen Unterschied
macht falls man die eine oder die andere Form nutzt.

Ich habe das ganze mit gcc 4.3 ausprobiert und der erzeugte
Assemblercode ist mit diesem Compiler exakt gleich. Nun frage ich
mich ob der C Standard garantiert, daᅵ ein '1.234f' immer ᅵquivalent
zu '(float)1.234' ist oder ob ich nur mit der von mir genutzten
Implementierung "Glᅵck" gehabt habe.

Gruᅵ Frank

--
There are no threads in alt.binaries.pictures.erotica,
so there's no gain in using a threaded news reader.
-- unknown source

Rainer Weikusat

unread,
Dec 17, 2009, 8:46:32 AM12/17/09
to
Frank Terbeck <f...@bewatermyfriend.org> writes:
> Gibt es einen Unterschied zwischen:
>
> float f;
> f = (float)1.234;
>
> und
>
> float f;
> f = 1.234f;
>
> Nat�rlich sind das verschiedene Konstrukte. Was mich jedoch
> interessiert ist, ob es f�r den erzeugten Code einen Unterschied

> macht falls man die eine oder die andere Form nutzt.
>
> Ich habe das ganze mit gcc 4.3 ausprobiert und der erzeugte
> Assemblercode ist mit diesem Compiler exakt gleich. Nun frage ich
> mich ob der C Standard garantiert, da� ein '1.234f' immer �quivalent
> zu '(float)1.234' ist

Ja. Im gegebenen fall ist allerdings beides ueberfluessig und

float f;
f = 1.234;

haette denselben Effekt.

Frank Terbeck

unread,
Dec 17, 2009, 9:16:31 AM12/17/09
to
Rainer Weikusat <rwei...@mssgmbh.com> wrote:
> Frank Terbeck <f...@bewatermyfriend.org> writes:
>> Gibt es einen Unterschied zwischen:
>>
>> float f;
>> f = (float)1.234;
>>
>> und
>>
>> float f;
>> f = 1.234f;
>>
>> Natᅵrlich sind das verschiedene Konstrukte. Was mich jedoch
>> interessiert ist, ob es fᅵr den erzeugten Code einen Unterschied

>> macht falls man die eine oder die andere Form nutzt.
>>
>> Ich habe das ganze mit gcc 4.3 ausprobiert und der erzeugte
>> Assemblercode ist mit diesem Compiler exakt gleich. Nun frage ich
>> mich ob der C Standard garantiert, daᅵ ein '1.234f' immer ᅵquivalent
>> zu '(float)1.234' ist
>
> Ja. Im gegebenen fall ist allerdings beides ueberfluessig und
>
> float f;
> f = 1.234;
>
> haette denselben Effekt.

Wobei ein einfaches '1.234' ja ohne Suffix eine double Konstante ist
(IIRC), was evtl Compilerwarnungen nach sich ziehen kᅵnnte, da
implizit in einen kleineren Datentyp gecastet wird.

Danke fᅵr die Klarstellung.

Message has been deleted

Claus Reibenstein

unread,
Dec 17, 2009, 10:14:15 AM12/17/09
to
Frank Terbeck schrieb:

> Rainer Weikusat <rwei...@mssgmbh.com> wrote:
>
>> float f;
>> f = 1.234;
>>
>> haette denselben Effekt.
>
> Wobei ein einfaches '1.234' ja ohne Suffix eine double Konstante ist
> (IIRC), was evtl Compilerwarnungen nach sich ziehen kᅵnnte, da
> implizit in einen kleineren Datentyp gecastet wird.

"Implizit" und "gecastet" widersprechen sich. Ein Cast ist per
definitionem eine explizite Konvertierung. Du meinst "konvertiert".

Ich kenne keinen Compiler, der in einem solchen Fall warnen wᅵrde. Ein
solcher Compiler mᅵsste z.B. auch in solchen Fᅵllen warnen:

float f, g;
g = 1.234; /* Konstante ist double */
f = g + 1; /* Ausdruck ist double */

Gruᅵ. Claus

Stefan Reuther

unread,
Dec 17, 2009, 12:22:52 PM12/17/09
to
Claus Reibenstein wrote:
> Frank Terbeck schrieb:
>>Rainer Weikusat <rwei...@mssgmbh.com> wrote:
>>> float f;
>>> f = 1.234;
>>>haette denselben Effekt.
>>
>>Wobei ein einfaches '1.234' ja ohne Suffix eine double Konstante ist
>>(IIRC), was evtl Compilerwarnungen nach sich ziehen kᅵnnte, da
>>implizit in einen kleineren Datentyp gecastet wird.
[...]

> Ich kenne keinen Compiler, der in einem solchen Fall warnen wᅵrde. Ein
> solcher Compiler mᅵsste z.B. auch in solchen Fᅵllen warnen:
>
> float f, g;
> g = 1.234; /* Konstante ist double */
> f = g + 1; /* Ausdruck ist double */

VC6 tut das oft und gerne.


Stefan

0 new messages