Frage zu const und #define



  • Hi (gleich der 2. Thread...).
    Ich möchte in einer Headerdatei bestimmte Optionen für den Code festlegen, die andere Dateien betreffen. Nun bin ich gerade dabei, das ganze etwas übersichtlicher zu gestalten (mit Namespaces und so weiter). Problem ist, dass es für Makros keine Namespaces gibt.

    Folgendes erkennt der Compiler ja sofort:

    //#define SETTING_ENABLE_LOG 1
    
    // ...
    
    #ifdef SETTING_ENABLE_LOG
    machwas();
    tudas();
    unddas();
    #endif
    

    Definiere ich SETTING_LOG_ENABLE nicht, so wird der Code gar nicht mehr mit einkompiliert.

    Versteht der Compiler aber auch bei "echten" (?) Konstanten, dass der Code nicht mehr benötigt wird? Beispiel:

    namespace Settings
    {
        const bool Logging = false;
    }
    
    // ...
    
    if (Settings::Logging)
    {
        machwas();
        tudas();
        unddas();
    }
    

    Würde der Code trotzdem mit einkompiliert, oder erkennt der Compiler das schon zur Compilezeit? Bin mir da verdammt unsicher und testen kann man es ja nicht >_<

    Gruß



  • Im Release Modus sollte er soetwas rausnehmen. Wenn du dir nicht sicher bist, kannst du ja mal ein paar MB text dort einfügen und in ein array speichern. Mal schauen, wie die file größe danach ausschaut.
    oder einfach mit nem disassembler nachschauen



  • Gute Idee - und Tatsache: Es funktioniert! Dankeschön 🙂

    Gruß


Anmelden zum Antworten