“wenn” und ” #wenn “; welches ist besser zu verwenden [duplicate]
Lesezeit: 4 Minuten
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
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).
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
Neeraj Dubey
Hallo, beide sind unterschiedlich
#if Testet, ob die Bedingung zur Kompilierzeit wahr ist.
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
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
13443500cookie-check“wenn” und ” #wenn “; welches ist besser zu verwenden [duplicate]yes
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