Forum: Compiler & IDEs datatyp long long


von Thomas (Gast)


Lesenswert?

hallo zusammen,
ich habe hier ein ganz merkwürdige Sache bei der Anwendung vom Datentyp 
long long:
Compiler gcc3.4 mit uclibc 0.9.27

int main( int argc, char **argv )
{
        int llsize;
        long long test=0x12345678; // = 0x123456789;

        llsize=sizeof( test );
        printf ("longlong size=%d",llsize);
        return 0;
}
Ausgabe: longlong size=8

ABER wenn ich eine Konstante (0x123456789) in der long long Variable 
"test" speichern will gibts folgende Fehler vom Compiler:
"error: integer constant is too large for "long" type"

Wenn long long 8Bytes groß ist, warum kann ich dann nur max 4Bytes drin 
speichern?
hat einer n Ahnung?

Danke

von (prx) A. K. (prx)


Lesenswert?

3.4 habe ich nicht im Angebot, aber mit 2.9 und 4.1 funktioniert es.

von Volker Z. (vza)


Lesenswert?

Thomas schrieb:
> long long test=0x12345678; // = 0x123456789;

Richtig:
1
long long test=0x12345678LL; // = 0x123456789;

weil Konstanten per default int sind. Und in Int passt es nicht. Die 
Zuweisung passiert später.

Volker

von (prx) A. K. (prx)


Lesenswert?

Volker Zabe schrieb:

> weil Konstanten per default int sind.

Sie haben den kleinsten Datentyp, der sie darstellen kann, mindestens 
aber "int". Die Abstufung ist etwas unterschiedlich für dezimale und 
nicht-dezimale Angabe.

0x123456789 ist also implizit "long long" wenn sizeof(long)==4.

von Rolf M. (rmagnus)


Lesenswert?

Ist der Compiler denn im C99-Modus gewesen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.