enum statt #define



  • Möchte mit C Konstanten definieren, die zur Linkzeit und nicht zur Kompilezeit in den Code eingesetzt werden. Das geht mit #define ja nicht.
    Stattdessen hatte ich die Idee enums zu verwenden:

    enum {property1 = c1, property2 = c2, ...} specifications;
    

    Im folgenden Code soll dann nur noch property1, property2, ... verwendet werden statt der Konstanten c1, c2,... .

    Jetzt kommt aber noch dazu, dass ich ne Testversion habe, die andere Werte für die properties verwenden soll als die mit anderen Programmteilen verlinkte final Version. Mein Gedanke: Sowohl die Testversion als auch die Finale Version kriegen ihre eigene enum Deklaration der specifications und der Linker würde die Werte dann entsprechend einsetzen.

    Geht das überhaupt oder setzt der Compiler vorher schon die enum Werte direkt beim Umwandeln des c codes in ein Objektfile ein?



  • Soweit ich weiß werden die Werte schon vom Compiler eingesetzt.
    Aber warum geht es denn nicht für die Testversion und die finale Version verschiedene defines zu haben ? Bei Versionen kompilieren musst du ja sowieso, sollte deshalb kein Problem sein dass schon der Compiler (bzw. der Präprozessor) die Werte einsetzt.



  • Was du machen kannst, ist in einem Header

    extern int const property1;
    extern int const property2;
    

    zu schreiben, dann zwei .c-Dateien vorzuhalten, in denen die Werte unterschiedlich definiert werden, und zur Linkzeit zu entscheiden, welche dazugelinkt werden soll.

    Das ist aber natürlich zur Laufzeit langsamer, und property1 etc. lassen sich so nicht als Compilezeitkonstanten (etwa für Arraygrößen) verwenden.


Log in to reply