Compiler - wird toter Code erkannt?



  • Servus,

    ich habe folgenden Code-Schnippsel und der kommt verdammt oft vor.

    // Globals, global.h, global.cpp
    extern string g_logl;
    // -- // Globals
    
    H2r::H2r( vector<string>& seqList ){
        if ( g_logl == "1" ){ cout << "H2r - H2r() ...\n"; }
        ...
    

    Jetzt muss ich herausfinden, ob mein Compiler diesen toten Code erkennt, wie mache ich das mit einem Profiler?

    Ich habe schon eine Vermutung wie die Antwort ausfällt, ich denke da die Entscheidung ob Logging-Version oder nicht erst zur Laufzeit fällt - wird das wohl sicher im Laufzeit-Code landen?! Es wird dabei eine Konfigurationsdatei eingelesen und dann die Werte entsprechend gesetzt.

    Kann ich eine Konstante setzen, dass der Compiler kapiert, dass das sicher toter Code ist und diesen dann nicht in die Laufzeitversion übernimmt, wenn ja wie geht das?

    Aus meinem Buch ist ein Weg sicher - das festlegen durch Präprozessoranweisung, aber dafür müsste ich alles ändern, daher gefällt mir die Lösung via Konstante schon besser.

    Danke vorab.



  • Jay1980 schrieb:

    ich habe folgenden Code-Schnippsel und der kommt verdammt oft vor.

    Dann wird es Zeit, diesen Codeschnipsel in eine Funktion auszulagern. Damit erübrigt sich dann wohl der Rest der Frage.



  • Jay1980 schrieb:

    aber dafür müsste ich alles ändern, daher gefällt mir die Lösung via Konstante schon besser.

    Code sollte leicht zu warten sein. Wartung bedeutet oft auch Veränderung. Wenn du feststellst, dass du für eine kleine Änderung den Code an zig Stellen anfassen musst, solltest du mit dem Refactoring anfangen, z.B. indem du den Logging-Mechanismus wie oben vorgeschlagen in eine Funktion oder Klasse auslagerst, so dass du solche Änderungen nur an einer Stelle machen musst.



  • Jay1980 schrieb:

    Jetzt muss ich herausfinden, ob mein Compiler diesen toten Code erkennt, wie mache ich das mit einem Profiler?

    Wo ist hier "toter Code"?

    Jay1980 schrieb:

    Ich habe schon eine Vermutung wie die Antwort ausfällt, ich denke da die Entscheidung ob Logging-Version oder nicht erst zur Laufzeit fällt - wird das wohl sicher im Laufzeit-Code landen?! Es wird dabei eine Konfigurationsdatei eingelesen und dann die Werte entsprechend gesetzt.

    Meinst Du, dass der Wert von g_logl sich zur Laufzeit entscheidet?

    Jay1980 schrieb:

    Kann ich eine Konstante setzen, dass der Compiler kapiert, dass das sicher toter Code ist und diesen dann nicht in die Laufzeitversion übernimmt

    Wozu ist dann die Abfrage eigentlich da, wenn doch -- falls ich Dich richtig verstehe -- g_logl nie gleich "1" sein kann?

    Jay1980 schrieb:

    Lösung via Konstante.

    Ich sehe hier keine Konstante.

    kk


Anmelden zum Antworten