Wenn wir Benutzereingaben verwenden möchten, um etwas in einem Programm zu tun, oder ein Ergebnis drucken wollen, müssen wir
%Vor% Andernfalls werden cout
und cin
vom Compiler nicht bestätigt. Der Befehl #include
ist jedoch ein Pre-Prozessor-Befehl. Und als ich mein Programm schrieb, passierte folgendes. Ich habe den folgenden Code geschrieben:
Und es sind keine Fehler aufgetaucht. Wie ist es möglich, cout
vor dem Einfügen von iostream
zu verwenden? Selbst wenn ich PRINT_DEBUG_INFO(a)
ohne iostream
deklariere, bekomme ich keinen Kompilierfehler.
Kann mir jemand erklären, warum das passiert?
Wenn Sie nur diese zwei Zeilen ausgeführt haben, gibt es keinen Grund für einen Fehler, weil Sie nur PRINT_DEBUG_INFO (a) definiert haben, nicht in einer Hauptfunktion implementiert. Die definierte Konstante wird nur ausgeführt, wenn sie in der Hauptfunktion implementiert ist. Betrachten Sie es als eine leere Blaupause für ein Gebäude; Obwohl es fehlerhaft ist, werden Bauingenieure es nicht auf Fehler prüfen, bis sie bereit sind, mit dem Bau des Gebäudes zu beginnen. Ähnliche Fälle hier.
Nehmen wir jedoch an, dass Sie es in der Hauptfunktion implementiert haben, genau wie ich es unten als Beispiel getan habe:
%Vor%In diesem Fall existiert die Hauptfunktion, in der wir die Funktion PRINT_DEBUG_INFO (a) implementiert haben, nachdem wir die iostream-Datei eingefügt haben. Daher wird das Programm kompiliert und erfolgreich ausgeführt.
Denken Sie nochmals daran, dass #define nur dazu dient, ein Programm zu definieren; der Compiler wird keinen Fehler erzeugen, wenn die definierte Konstante nicht einmal einmal implementiert wird; unabhängig von den Fehlern darin (beachten Sie, dass Syntaxfehler einen Kompilierungsfehler verursachen). Es wird nur vollständig auf Fehler überprüft, wenn die Funktion wie oben implementiert ist.
Viel Glück.
Der Präprozessor benötigt keine C ++ deklarierten Symbole, die für seine Arbeit ausgewertet werden.
Es ist reine Textverarbeitung , also definiere ein Makro wie
%Vor%und erweitern es wie
%Vor%wird
%Vor%Es wird also bei der Definition oder Erweiterung des Makros nichts über die richtige C ++ - Syntax überprüft.
Diese Anweisungen werden vom C ++ - Compiler weiterbearbeitet, der darüber klagt, dass cout
nicht im globalen Gültigkeitsbereich deklariert ist.
Um dies zu beheben, deklarieren Sie Ihr Makro wie
%Vor%Sie definieren PRINT_DEBUG_INFO, aber Sie verwenden es nicht, so dass der Compiler nichts kompilieren oder sich darüber beschweren kann.
Sie definieren nur PRINT_DEBUG_INFO(a)
und verwenden es nicht. Wenn Sie es tatsächlich in Ihrem Programm verwenden, erhalten Sie den Fehler, dass cout
nicht definiert ist.
Wenn Sie es nicht verwenden, findet der Compiler keinen Platz, um die definierte Konstante zu ersetzen. Wenn Sie es tatsächlich verwenden, wird das Programm während der Kompilierung erweitert und zeigt Ihnen den Fehler.
Und außerdem gibt es eine Klammer in Ihrem Makro, die mit Klammern erweitert wird und zu einem Fehler führen kann.
Tags und Links c++ c-preprocessor