Zwischen 32Bit und 64Bit compatiblen Code schreiben.



  • Kompatibilitätsprobleme zwischen visual cpp 2005 64 Bit und 32 Bit.

    Beim Umstellen von 32-Bit auf 64-Bit gibt der Compiler Warnungen aus:
    Beispiel:
    Bei Subtraktion-zweier Pointervariablen muß das Ergebnis in einer 64-Bit Variable stehen.
    Den Rückgabewert aus sizeof <struct> in einer sizeof_t variable speichern.

    Meine Frage:
    Ich möchte möglichst einheitlichen Programmcode für die 64-Bit und die 32-Bit Version.
    Gibt es spezielle Include-Files für die 64-Bit Version?
    (z.B. mit einer size_t -Deninition.)



  • Keine speziellen include Files, nein.
    Du musst einfach nur passende Typen für Grössen verwenden.
    Eben ptrdiff_t, size_t, intptr_t, DWORD_PTR etc.



  • Bei den Sourcecode-Zeilen:

    int var;
    int si = size_t (var);

    erscheint bei der 64Bit-Version die Warning:

    <file>.cpp : warning C4267: 'Initialisierung': Konvertierung von 'size_t' nach 'int', Datenverlust möglich

    bei der 32Bit-Version erscheint keine Warning.



  • Weil dort wohl ein sizeof_t genauso groß wie ein int ist. Speichergrößen, Indizes und Zeiger in einem int abzulegen ist nicht empfehlenswert.



  • Daß bei der 64-Bit Version eine Warnung erscheint ist zweifellos gerechtfertigt.
    Was ich nicht verstehen kann, daß bei der 64-Bit Version kein eigenes size_t existiert.
    Ich kann also size_t nicht aufrufen, wenn ich das Programm sowohl mit den 32-Bit als auch für die 64-Bit Compiler compilieren will.



  • Hans500 schrieb:

    Was ich nicht verstehen kann, daß bei der 64-Bit Version kein eigenes size_t existiert.

    Natürlich ist size_t auch für 64-Bit-Code definiert. Definiert in stdlib.h und stddef.h .

    Wenn der Typ nicht bekannt sein sollte, inkludierst du einen der Header nicht.




Anmelden zum Antworten