“wenn” und ” #wenn “; welches ist besser zu verwenden [duplicate]

Lesezeit: 4 Minuten

Benutzer-Avatar
Anklon

Ich habe das gelernt if oder #if können beide für Zustandsprüfungen verwendet werden. Da wir die Bedingungen mit überprüfen können ifwarum sollten wir einen Präprozessor verwenden #if?

Welchen Unterschied macht es für meinen Code, wenn ich verwende #if Anstatt von if?

Welches ist besser zu verwenden und warum?

  • Suchen Sie nach “Präprozessor”.

    – Adam Siemion

    8. Mai 2013 um 10:50 Uhr

  • Ich verstehe die -1 nicht. Dies ist zwar völlig noobistisch, aber eine ziemlich berechtigte Frage. Und nicht so einfach zu googeln, wenn Sie das Schlüsselwort “Präprozessor” nicht kennen.

    – Dariusz

    8. Mai 2013 um 10:53 Uhr

  • Ich verstehe die “nahezu nicht konstruktiven” Abstimmungen nicht: Dies ist eine etwas einfache, aber völlig legitime Frage.

    – Sergej Kalinitschenko

    8. Mai 2013 um 10:56 Uhr

  • @Krishnabharda Da Sie ein Duplikat gefunden haben, sollten Sie den Beitrag als Duplikat kennzeichnen und möglicherweise einen Kommentar hinzufügen, damit die Leute nicht ihre Zeit mit der Beantwortung dieser Frage verschwenden.

    – Dariusz

    8. Mai 2013 um 11:19 Uhr

  • IMHO ist das weitaus konstruktiver als all das “omg *scanf funktioniert nicht, wenn ich zufällige Argumente gebe, ohne die Spezifikation zu lesen” Fragen, die Benutzer jede Woche offen lassen und manchmal positiv bewerten. Es sieht für mich eher nach einem Duplikat aus, aber die Frage selbst erscheint vernünftig.

    – effe

    8. Mai 2013 um 11:27 Uhr


Benutzer-Avatar
TJ Crowder

if und #if sind verschiedene Dinge mit unterschiedlichen Zwecken.

Wenn Sie die verwenden if -Anweisung wird die Bedingung zur Laufzeit ausgewertet, und der Code für beide Zweige ist im kompilierten Programm vorhanden. Die Bedingung kann auf Laufzeitinformationen basieren, wie z. B. dem Status einer Variablen. if dient der Standardflusskontrolle in einem Programm.

Wenn Sie den Präprozessor verwenden #ifwird die Bedingung zur Kompilierzeit ausgewertet (ursprünglich war dies Vor Kompilierzeit, aber heutzutage ist der Präprozessor normalerweise Teil des Compilers), und der Code für den falschen Zweig ist nicht im kompilierten Programm enthalten. Die Bedingung kann nur auf Informationen zur Kompilierzeit (wie z #define Konstanten und dergleichen). #if dient dazu, unterschiedlichen Code für unterschiedliche Umgebungen zur Kompilierzeit zu haben (z. B. unterschiedlicher Code zum Kompilieren unter Windows vs. *nix, so etwas).

Benutzer-Avatar
MOHAMED

Wir können nicht sagen, was besser zu verwenden ist, da eines in der Kompilierungsphase verwendet wird (#if) und der andere wird in der Laufzeitphase verwendet (if)

#if 1
   printf("this code will be built\n");
#else
   printf("this code will not\n");
#endif

versuchen Sie, den obigen Code mit zu bauen gcc -E und Sie werden sehen, dass Ihr Compiler einen weiteren Code generiert, der nur Folgendes enthält:

printf("this code will be build\n");

das andere printf wird im neuen Code (Präprozessorcode) nicht vorhanden sein und dann nicht in der Programmbinärdatei vorhanden sein.

Fazit: Die #if Behandelt wird in der Compilation-Phase aber das Normale if wird behandelt, wenn Ihr Programm ausgeführt wird

Du kannst den … benutzen #if 0 in einem Teil Ihres Codes, um zu vermeiden, dass der Compiler ihn kompiliert. Es ist, als hätten Sie diesen Teil kommentiert

Beispiel

int main(void) {

       printf("this code will be build\n");
#if 0
       printf("this code will not\n");
#endif

}

es ist äquivalent zu

int main(void) {

       printf("this code will be built\n");
/*
       printf("this code will not\n");
*/

}

  • “einer wird in der Kompilierungsphase verwendet (#if) und der andere wird in der Kompilierungsphase verwendet (if)” 😉

    – Michael B.

    8. Mai 2013 um 12:38 Uhr

  • @MichaelB. es ist ein Tippfehler 🙂

    – MOHAMED

    8. Mai 2013 um 13:12 Uhr

Benutzer-Avatar
Neeraj Dubey

Hallo, beide sind unterschiedlich

  1. #if Testet, ob die Bedingung zur Kompilierzeit wahr ist.
  2. if wird zur Laufzeit ausgewertet.

Sie sollten #if verwenden, wenn das Ergebnis der Bedingung zur Kompilierzeit bekannt ist, und regelmäßig if, wenn das Ergebnis erst zur Laufzeit bekannt ist.

#if DEBUG

Ich weiß, dass ich zur Kompilierzeit einen Debug-Build mache

if (date == DateTime.Today)

Kommt darauf an, welcher Tag es ist

Benutzer-Avatar
Lefteris E

Einige Verwendungen von #if sind:

  • Sie möchten zusätzliche Ausdrucke oder Überprüfungen einfügen, wenn Sie eine Debug-Version Ihres Codes erstellen
  • Sie möchten sicherstellen, dass der Compiler keine .h-Datei zweimal enthält
  • Sie möchten Code schreiben, der verschiedene Systemaufrufe verwendet, und je nach System wird er bei Verwendung der entsprechenden kompiliert.

Da alle oben genannten Punkte zur Kompilierzeit überprüft werden, bedeutet dies Folgendes:

  • Die Bedingung muss zur Kompilierzeit ausgewertet werden können
  • Der erzeugte Code enthält keine Verzweigungen, die als falsch ausgewertet werden, was zu kleinerem Code führt und schneller ist, da die Bedingung nicht jedes Mal überprüft wird, wenn das Programm ausgeführt wird.

Beispiele:

Zusätzliche Prüfungen nur für den Debug-Modus hinzufügen:

#define DEBUGLEVEL 2

#if DEBUGLEVEL > 1
   printf("The value of x is: %d", x);
#end if

#if DEBUGLEVEL > 2
   printf("The address of x is: %x", &x);
   ASSERT(x > 100);
#end if

Sicherstellen, dass der Header nur einmal eingefügt wird:

#ifndef PERSON_H
#define PERSON_H
   class Person{
        ....
   };
#end if

Je nach Plattform unterschiedlicher Code:

#ifdef WINDOWS
   time = QueryPerformanceCounter(..);
#else
   time = gettimeofday(..);
#endif

1344350cookie-check“wenn” und ” #wenn “; welches ist besser zu verwenden [duplicate]

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

Privacy policy