unbestimmter bereich



  • Hat eigentlich jemand eine Idee, wie man die Endianess zur Compilezeit herausbekommen kann? Geht das überhaupt ohne irgendwelche defines?

    Ja.



  • knivil schrieb:

    Hat eigentlich jemand eine Idee, wie man die Endianess zur Compilezeit herausbekommen kann? Geht das überhaupt ohne irgendwelche defines?

    Ja.

    Dann wäre es auch nett, wenn Du das mal erörtern könntest.



  • google.de => http://www.allegro.cc/forums/print-thread/592785 irgendwie in der Mitte und am Ende.



  • knivil schrieb:

    google.de => http://www.allegro.cc/forums/print-thread/592785 irgendwie in der Mitte und am Ende.

    Ich sehe da keine Antwort auf die Frage...



  • However, why not write a mini program (along the lines of Thomas's) to run first and output either #define BIG_ENDIAN or #define LITTLE_ENDIAN to a .h file, then include that file in your main program. It would be easy to incorporate this into a makefile.

    Und nenne es dann nicht #define ... sondern const bool endian or whatever.



  • knivil schrieb:

    However, why not write a mini program (along the lines of Thomas's) to run first and output either #define BIG_ENDIAN or #define LITTLE_ENDIAN to a .h file, then include that file in your main program. It would be easy to incorporate this into a makefile.

    Und nenne es dann nicht #define ... sondern const bool endian or whatever.

    Hmm, das ist zwar eine Möglichkeit, aber leider lässt sich das nicht in den Buildprozess meiner Firma integrieren...



  • Naja, welche Vorteile ergeben sich denn, wenn du es zur Kompilezeit festellen kannst, anstatt einfach zur Laufzeit?



  • Bei Sockets gibt's doch htonl und Weitere, so was ähnliches würde ich auch einfach machen (oder gleich htonl/... benutzen).



  • knivil schrieb:

    Naja, welche Vorteile ergeben sich denn, wenn du es zur Kompilezeit festellen kannst, anstatt einfach zur Laufzeit?

    Ich kann dann via Template-Metaprogrammierung Funktionen zum Konvertieren in ein portables Format und zurück festlegen.
    Am Ende würde ich dann z.B. nur noch serialize und deSerialize aufrufen. Die Vorarbeit (inklusive einiger Typprüfungen) könnte der Compiler erledigen.



  • Dann musst du doch schauen, ob der Compiler dir einige defines liefert. C++ von Haus aus, als auch Templates erfahren nie was von der Endianess. Das ist systemspezifisch und ausserhalb der Reichweite von C++. Die vorgestellte Loesung ist auch die einzige, die mir einfaellt. Leider funktioniert sie nicht bei cross compiles. Hier ist was aehnliches: klick



  • Tachyon schrieb:

    Man kann das machen, aber das ist a)nicht portabel und b)kann man sich damit u.U. Probleme einfangen (Alignment). Das letztere ist bei gängigen Plattformen zwar meistens unproblematisch, aber trotzdem...
    Was genau willst Du denn damit erreichen?

    Alignment-Probleme kann man keine bekommen wenn man NACH char* castet. VON char* ist wieder ein anderes Thema...



  • hustbaer schrieb:

    Tachyon schrieb:

    Man kann das machen, aber das ist a)nicht portabel und b)kann man sich damit u.U. Probleme einfangen (Alignment). Das letztere ist bei gängigen Plattformen zwar meistens unproblematisch, aber trotzdem...
    Was genau willst Du denn damit erreichen?

    Alignment-Probleme kann man keine bekommen wenn man NACH char* castet. VON char* ist wieder ein anderes Thema...

    Naja, aber wenn man was serialisiert, muss man das typischerweise auch wieder deserialisieren.

    knivil schrieb:

    Dann musst du doch schauen, ob der Compiler dir einige defines liefert. C++ von Haus aus, als auch Templates erfahren nie was von der Endianess. Das ist systemspezifisch und ausserhalb der Reichweite von C++. Die vorgestellte Loesung ist auch die einzige, die mir einfaellt. Leider funktioniert sie nicht bei cross compiles. Hier ist was aehnliches: klick

    Jo, anders geht es wohl nicht. Ich finde es aber schade, dass der Standard keine Möglichkeiten zum Checken der Endianess vorschreibt. Viele Dinge, die aus numeric_limits<> rauspurzeln sind ja auch Implementation Defined. Und man benötigt die Information ja auch schon öfters mal. Man schaue sich z.B. mal die ganzen Netzwerkprotokolle an...


Anmelden zum Antworten