int immer als LSBF gespeichert?
-
Hi Leute,
Ist es garantiert, dass ein int immer mit dem LSB als erstes im Speicher steht?
Dass dieser assert:int n=0x102; char c[4]=""; c[0]=2; c[1]=1; assert(!memcmp(&n,c,4));
also nie ausgelöst wird?
Mir würde es auch reichen, wenn es nur für Windows-Systeme garantiert wäre ...
-
Garantie kann ich dir keine geben, der Standard hält sich auch aus solchen Sachen raus. (C++ soll ja so portabel wie möglich sein)
Aber ich nehme mal an, dass, wenn es unter einem Windows funktioniert, es auch unter den anderen Windowsen > 3.11 klappt
-
ok, dann nehm ich das einfach an und hoff das beste
-
auf Intel-Maschinen klappt es, auf Sun Sparc nicht. Windows läuft AFAIK nur auf Intel, also isses von daher kein Problem ...
-
ok, passt
-
Original erstellt von Bashar:
Windows läuft AFAIK nur auf IntelNT4 laeuft auch auf Alphas, NT3.51 sogar auf noch 2 Plattformen (DEC?). Zumindest die Alpha macht das ganze "falschrum" (war das jetzt low oder high order?)
-
mist
EDIT:
Dann bin ich halt noch Plattformabhängiger als ich mit der MFC eh schon bin und schreib nur für INTEL-Plattformen.[ Dieser Beitrag wurde am 08.06.2003 um 09:56 Uhr von dEUs editiert. ]
-
Man kann halbwegs portabel herausfinden, welche Byte-Reihenfolge verwendet wird (http://www.eskimo.com/~scs/C-faq/q20.9.html). Das ist eigentlich kein Aufwand und man muss sich nicht schwachsinnigerweise einschränken. Es gibt übrigens auch Maschinen, die verwenden weder das High- noch Low-Byte-Order.
[ Dieser Beitrag wurde am 08.06.2003 um 14:04 Uhr von Daniel E. editiert. ]
-
was dann?
-
-
@dEUs: Und dann gäbe es da ja noch die heiligen templates (vielleicht schaffst dus ja, mit templates die byte-order rauszufinden). Bzw. für faule #ifdefs.
-
vielleicht schaffst dus ja, mit templates die byte-order rauszufinden
Also wenn du damit ein Template-Metaprogramm meinst, dann wette ich jetzt einfach mal dagegen
-
Original erstellt von HumeSikkins:
[quote] vielleicht schaffst dus ja, mit templates die byte-order rauszufinden**
Also wenn du damit ein Template-Metaprogramm meinst, dann wette ich jetzt einfach mal dagegen :)**[/QUOTE]stimmt. templates sind unnötig. etwas wie:
const bool big = Z == * (int16_t *) "xy";
- wobei Z die entsprechende zahl ist -
reicht ja vollkommen
-
Hm,
ich wollte mit meinem Beitrag eigentlich sagen, dass ich der Meinung bin, dass man die Byte-Order *nicht* mit einem compilezeit-Programm herausfinden kann.
-
Original erstellt von HumeSikkins:
Hm,
ich wollte mit meinem Beitrag eigentlich sagen, dass ich der Meinung bin, dass man die Byte-Order *nicht* mit einem compilezeit-Programm herausfinden kann.du bist also der meinung, das meine zeile nicht geht?
-
Original erstellt von Mr. N:
du bist also der meinung, das meine zeile nicht geht?wieso?
hat er das behauptet?
-
Original erstellt von Shade Of Mine:
wieso?
hat er das behauptet?es wird doch compile-zeit geregelt. so hab ich ihn zumindest verstanden.
-
du bist also der meinung, das meine zeile nicht geht?
Ich verstehe deine Zeile nicht, behaupte aber mal, dass es sich dabei nicht um einen Compilezeit-Ausdruck handelt. Du kannst diese Zeile also insbesondere nicht in einem Meta-Programm verwenden (z.B. als non-type Parameter für ein Template).
-
Original erstellt von HumeSikkins:
behaupte aber mal, dass es sich dabei nicht um einen Compilezeit-Ausdruck handeltes ist doch ein const davor.
-
es ist doch ein const davor.
Ja und?
int foo(); const int f = foo();
Ist auch ein const davor, macht f aber noch lange nicht zu einer Compilezeit-Konstante.