Longlong ?

Hallo,

hab’ ein Problem, bei dem ich nicht weiterkomme

mit gcc bekomme ich bei folgenden Code ein Problem :

void test()
{
unsigned __int64 abc;
//oder LONGLONG. Produziert das gleiche Verhalten

// Maximum bei 64Bit
abc=18446744073709551615;
}

Fehlermeldung :
[Warning] integer constant is so large that it is unsigned
[Warning] this decimal constant is unsigned only in ISO C90
[Warning] integer constant is too large for „long“ type

Warum erkennt er nicht, das abs unsigned ist ?
Wo ist das Problem ?

Danke

So9
http://www.Sven-of-Nine.de

Hallo So9,

Warum erkennt er nicht, das abs unsigned ist ?
Wo ist das Problem ?

Schau einmal in der Docu nach, ob ein Compiler 64-Bit Integer kennt und wenn ja, wie man die deklarieren muss !!

MfG Peter(TOO)

mit gcc bekomme ich bei folgenden Code ein Problem :

void test()
{
unsigned __int64 abc;
//oder LONGLONG. Produziert das gleiche Verhalten

// Maximum bei 64Bit
abc=18446744073709551615;
}

Fehlermeldung :
[Warning] integer constant is so large that it is unsigned
[Warning] this decimal constant is unsigned only in ISO C90
[Warning] integer constant is too large for „long“ type

Du musst bei Konstanten teilweise den Typ spezifizieren, weil der Compiler ansonsten erstmal annimmt, dass das int- bzw. long-Werte sind. In deinem Fall:

abc=18446744073709551615ULL;

Bingo,

steht irgendwie in keiner Doku drin.

Danke

So9

steht irgendwie in keiner Doku drin.

Das Suffix „LL“ bzw. „ULL“ ist wohl erst in C90 in den Standard gewandert. Die Verwendung von L oder UL ist allerdings schon länger in Gebrauch und wird z.B. für C++ in „Die C++ Programmiersprache“, 4. aktualisierte Auflage (Stroustrup) in Anhang C.4 beschrieben.

Allgemein wird das Thema allerdings wirklich eher stiefmütterlich behandelt.