Einfache Methoden zum Deaktivieren von Codeteilen

Lesezeit: 4 Minuten

Benutzeravatar von kolenda
Kolenda

Dies ist keine typische Frage zur Lösung eines bestimmten Problems, sondern eher eine Gehirnübung, aber ich frage mich, ob jemand eine Lösung hat.

In der Entwicklung müssen wir oft einige Teile des Codes deaktivieren oder wechseln, um verschiedene Ansätze zu überprüfen. Dazu verwenden wir Kommentare bzw #definesaber mein Favorit ist:

//*
[code here]
//*/

Wenn Sie jetzt nur den ersten Schrägstrich entfernen, wird der Code auskommentiert.

Die Frage: Gibt es eine Möglichkeit, ähnliches zu implementieren ansonsten Codeschalter? Ich habe versucht, es zu finden, aber ich hatte immer ein Problem und konnte keine funktionierende Lösung finden.

Und vielleicht kennen Sie ähnliche Tricks?

  • Die Verwendung von Kommentaren ist problematisch, da Kommentare nicht verschachtelt werden können. Wenn Sie Kommentare im deaktivierten Code haben, funktioniert das nicht.

    – Irgendein Programmierer-Typ

    30. Juli 2012 um 17:42 Uhr

  • Guter Punkt Joachim. Aber wenn Sie es während des Prototypings verwenden, verwenden Sie Kommentare nicht so oft.

    – Kolenda

    30. Juli 2012 um 17:45 Uhr

  • Ah nein, aber auf der anderen Seite schleicht sich Code, der nur ein Prototyp sein sollte, in der realen Welt viel zu oft in den eigentlichen Code ein.

    – Irgendein Programmierer-Typ

    30. Juli 2012 um 17:47 Uhr

Benutzeravatar von pb2q
pb2q

Wrapping des Codes mit #if 0 macht den Trick, aber dann müssen Sie noch den Code bearbeiten, um ihn zu aktivieren/deaktivieren. Das ist nicht viel besser, als nur den Kommentarblock zu verwenden.

Beachten Sie, dass Sie auch eine definierte Präprozessorkonstante verwenden können:

#ifdef ENABLE_TESTS
// code that you want to run ONLY during tests 
#endif

Wenn Sie jetzt den Code erstellen, können Sie diese Konstante in Ihrem Build-Prozess – IDE/Makefile/Build-Skript/Befehlszeile – selektiv definieren/definieren, ohne den Code bearbeiten zu müssen:

$ gcc -DENABLE_TESTS source.c

Ich habe diese Antwort hinzugefügt, um all die frühen auszugleichen #if 0 Antworten, aber dieses Konstrukt aus der akzeptierten Antwort ist die beste Antwort zur konkreten Frage: /**/ foo(); /*/ bar(); /**/. Bitte verwenden Sie solche Kommentartricks sparsam.

  • Der Name klingt etwas verwirrend. Ich würde Kompilieren mit erwarten -DDISABLE_TEST Testcode zu deaktivieren. Hier ermöglicht es es.

    – ArjunShankar

    30. Juli 2012 um 17:47 Uhr

  • @ArjunShankar ja das ist verwirrend

    – pb2q

    30. Juli 2012 um 17:48 Uhr

  • Ja, das ist besser. Und das ist eine nützliche Antwort. +1.

    – ArjunShankar

    30. Juli 2012 um 17:50 Uhr

  • Gibt es etwas so Ordentliches in Java?

    – Lightyear Buzz

    31. Juli 2012 um 5:31 Uhr


  • @LightyearBuzz kein Präprozessor in Java, nein. Aber Java tut habe ein ähnliches -D Befehlszeilenschalter, mit dem Sie übergeben können System Eigenschaftswerte in der Befehlszeile. Sie müssen auf die Standardlaufzeit zurückgreifen if/then Prüfungen, zB: if (System.getProperty("key", "defaultValue")). Das C #if/#endif ist Kompilierzeit.

    – pb2q

    31. Juli 2012 um 17:42 Uhr

#if 0
...disabled code here
#endif

  • Die Verwendung von #if 0 für deaktivierten Code und #if 01 für aktiviert ermöglicht das Umschalten zwischen den beiden Fällen, indem ein einzelnes Zeichen (ein Löschen oder eine 1) anstelle von zwei (ein Löschen und der neue Wert) eingegeben wird.

    – James Waldby – jwpat7

    30. Juli 2012 um 23:07 Uhr

Ich bin mir nicht sicher, ob ich das posten sollte, weil ich es nicht für „guten Code“ halte, aber ich gebe zu, dass ich die folgende Technik als Quick-n-Dirty-Methode verwendet habe, um schnell zwischen zwei kleinen Schnipseln wechseln zu können des Codes, wenn ich gerade etwas auschecke:

// in the following , foo() is active:
/**/ foo(); /*/ bar(); /**/

Entfernen Sie jetzt einfach einen der Sternchen vorne:

// now bar() is active:
/*/ foo(); /*/ bar(); /**/

Natürlich sollte dies nie über die Phase des “nur mal Ausprobierens” hinauskommen…

  • @kolenda: #if 0 mit einem #else macht das gleiche, und es ist viel viel sauberer …

    – Karoly Horvath

    30. Juli 2012 um 23:05 Uhr

Präprozessor if-else funktioniert auch

#if 1
  // ... enabled if 1
#else
  // ... enabled if 0
#endif

Verwenden Sie etwas Präprozessorlogik, um Ihnen hier zu helfen:

#if 0
    //code goes here
#endif

Genießen

Benutzeravatar von Nick Dandoulakis
Nick Dandoulakis

Manchmal verwende ich den folgenden Trick, um zwischen zwei zu wechseln faul Kommentare.

//* <-- remove the first slash
[code block 1]
/*/
[code block 2]
//*/

Benutzeravatar von Donotalo
Donotalo

Nun, wenn der Code deaktiviert werden musste einmal oder zweimal Vor dem Abschließen bevorzuge ich die Verwendung von Hotkeys, die von der IDE bereitgestellt werden, um diesen Code auszukommentieren und später zu kommentieren. Ja, ich muss zuerst den Codeblock auswählen, aber ich ziehe es vor, nicht alle eine weitere Debugging-Variable/Präprozessor-Direktive/if-Anweisung hinzuzufügen Mal muss ich einen Teil des Codes deaktivieren. Dies geschieht meistens.

Wenn ich es dagegen brauche immer wieder wechseln zwischen 2 Codeblöcken das Richtige zu finden, dann verwende ich a if (0) / if (1) zum Deaktivieren/Aktivieren des Codeblocks.

[code block 1]

Später

if (0)
{
    [code block 1]
}
else
{
    [code block 2]
}

  • +1, weil mit Ihrer Syntax der nicht ausgeführte Code immer noch auf Syntaxfehler überprüft wird, während #ifdef(s) diesen Code vor dem Compiler verbirgt.

    – Marco Leogrande

    11. August 2012 um 23:54 Uhr

  • und es leidet immer noch an Geschwindigkeit, wenn es sich in einer großen Schleife befindet

    – Jangorecki

    7. Juni 2020 um 22:53 Uhr

1390590cookie-checkEinfache Methoden zum Deaktivieren von Codeteilen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy