Ich habe folgende Anweisung (p und q sind vom Typ void*):
Code: Alles auswählen
p=(long)p^(long)q;
(Das gcc meint dass p^q nicht geht.)
Code: Alles auswählen
p=(long)p^(long)q;
vollständiger Teil:Meillo hat geschrieben:Beantworte folgende Frage: Was ist die semantische Bedeutung von ``Adresse XOR Adresse''?
Code: Alles auswählen
p=p^q;
q=p^q;
p=p^q;
Code: Alles auswählen
void* r=p;
p=q;
q=r;
Bei nem Typischen amd64 System sind long long und long gleich groß und 64Bit. => mein long passt genausogut wie dein long long.format_c hat geschrieben:Oder bin ich jetzt aufdem Holzweg?
...und da Windows ständig das Problem hat, daß Zeiger in Integers übergeben werden (Windows-Procedures haben halt nur 2 extra Parameter, wParam und lParam) und andersherum, hat MS dafür Typen wie z.B. LONG_PTR in den Tiefen von windows.h (vermutlich wintypes.h?) definiert. Siehe auch: http://msdn.microsoft.com/en-us/library/cc230349.aspxwanne hat geschrieben:Die Windowsler machen das aber anders. Bei denen ist ein long 32 bit wie ein int.
Das abslout richtige Stichwort. (zum googeln) Was ich suche ist uintptr_t! Das ist in der stdint.h drin und die ist in C99.owl102 hat geschrieben:LONG_PTR
Okay, das lasse ich gelten.wanne hat geschrieben:vollständiger Teil:Meillo hat geschrieben:Beantworte folgende Frage: Was ist die semantische Bedeutung von ``Adresse XOR Adresse''?Also gleichbedeutend mitCode: Alles auswählen
p=p^q; q=p^q; p=p^q;
Nur eben auf einem Register weniger. (Es geht aber um's pinzip nicht nicht darum, dass der Code ne Nanosekunde schneller läuft. Weil unter guten Vorraussetzngen ein mal weniger auf den L1 Cache zugegriffen werden muss.)Code: Alles auswählen
void* r=p; p=q; q=r;