zugriff auf define (innerhalb von struct)
-
_matze schrieb:
Wenn ein 32 Bit int/long zu klein ist, dann nimm long long oder __int64.
Ich arbeite auf einem 32Bit System - bei dem gibt es kein long bzw. entspricht int. Von daher stellt das keine möglichkeit für mich dar.
-
zihat schrieb:
Nachdem die Zahl für den int-bereich viel zulange ist, wollte ich gern einen int pointer auf diese zahl verwenden. Im struct array hab ich dann den ptr auf das define gesetzt.
man kann nicht auf #defines zeigen, weil die ja nicht im speicher sind, sondern nur im quelltext. ausserdem wäre ein int* bestimmt auch zu klein für 40bits oder was das da ist^^
-
Zihat schrieb:
_matze schrieb:
Wenn ein 32 Bit int/long zu klein ist, dann nimm long long oder __int64.
Ich arbeite auf einem 32Bit System - bei dem gibt es kein long bzw. entspricht int. Von daher stellt das keine möglichkeit für mich dar.
Deswegen schrieb ich ja "32 Bit int/long", weil die auf 32-Bit-Systemen gleichlang sind. Das heißt aber nicht, das du keinen 64-Bit-Typen verwenden kannst. Probier's doch einfach aus:
unsigned __int64 i=18446744073709551615; cout << i; cin.get();
-
Zihat schrieb:
Ich arbeite auf einem 32Bit System - bei dem gibt es kein long bzw. entspricht int.
_matze sprach von long long. Was für ein System ist das denn?
-
largeinteger-freak schrieb:
zihat schrieb:
Nachdem die Zahl für den int-bereich viel zulange ist, wollte ich gern einen int pointer auf diese zahl verwenden. Im struct array hab ich dann den ptr auf das define gesetzt.
man kann nicht auf #defines zeigen, weil die ja nicht im speicher sind, sondern nur im quelltext. ausserdem wäre ein int* bestimmt auch zu klein für 40bits oder was das da ist^^
deshalb wollte ich in der struct einen pointer auf die zahl haben... dann kann ich mich mit einer for-schleife z.B. die zahl ausgeben lassen...
schön wäre, wenn ich die verlinkung bereits in der struct durchführen könnte auf diese Zahl.
Zihat
-
Probier lieber erstmal meinen Vorschlag aus, bevor du dieses struct-Gefriemele weiter verfolgst. Du kriegst den Wert schon in einer Variable unter.
Unter welchem System arbeitest du denn?
-
Zihat schrieb:
deshalb wollte ich in der struct einen pointer auf die zahl haben...
das geht ja eben nicht, weil die zahl 'nur' als define existiert. pointer sind aber dazu da, auf speicheradressen zu zeigen und nicht in den quellcode.
#define WERT 1234456571221 void *p = &WERT; // <--- sowas klappt nimmer nicht
-
5.2.4.2.1 schrieb:
maximum value for an object of type unsigned long long int
ULLONG_MAX 18446744073709551615
MFK schrieb:
_matze sprach von long long. Was für ein System ist das denn?
ISO-C?
-
Ist __int64 nicht eigentlich Compiler-spezifisch? Wenn ja, gibt's noch andere Compiler die das unterstützen? Wenn ja, welche? (Hab dazu im Netz nichts gefunden).
ok, hab doch was gefunden, ist Compiler-spezifisch. Bleibt die Frage, ob z.B. der GCC das unterstützt (meinetwegen auch per typedef).
-
Der kann angeblich fast ganz C99. Also auch das.
-
Badestrand schrieb:
Ist __int64 nicht eigentlich Compiler-spezifisch?
ja, so heissen die 64bittigen ints beim msvc. GCC nennt das 'long long' und im C99 stdint.h heissen die 'int64_t'
-
mein prozessor hat nur 32 bits, was soll mir da _int64 bringen? das kann ich nur mit x64 benutzen
-
mein prozessor hat nur 32 bits, was soll mir da _int64 bringen?
Stell dir vor: ich habe nur zwei Augen, und schon mehr als vier Dinge gesehen! Warum wohl?
-
zihat schrieb:
mein prozessor hat nur 32 bits, was soll mir da _int64 bringen? das kann ich nur mit x64 benutzen
der prozessor ist (fast) nicht so wichtig. was benutzt du denn für einen compiler?
...und welchen prozessor solltest du trotzdem mal sagen.
-
zihat schrieb:
mein prozessor hat nur 32 bits, was soll mir da _int64 bringen? das kann ich nur mit x64 benutzen
Nein Bruder, das funktioniert schon seit über 10 Jahren auf 32 bit Maschinen.
-
zihat schrieb:
mein prozessor hat nur 32 bits, was soll mir da _int64 bringen? das kann ich nur mit x64 benutzen
Anstatt ständig zu widersprechen, solltest du meinen Vorschlag vielleicht erstmal ausprobieren. Das ist ja alles schon ein paar Tage her, und du hättest 2 Minuten gebraucht, um das wenigstens mal zu testen...
Übrigens heißt der Typ __int64, nicht _int64 (damit du nicht sagst: _int64 geht ja doch nicht!), oder eben long long (für deine Zwecke am besten unsigned). Eine dritte Variante wurde hier ja auch gepostet: int64_t. Eine der drei Versionen wird für dich schon passen.