4.2 – Globale Variablen und Links lernen c ++ bitcoin io

Jetzt werden symbolische Konstanten nur einmal (in constants.cpp) instanziiert, anstatt einmal, wenn constants.h #include ist, und andere Verwendungen beziehen sich einfach auf die Version in constants.cpp . Bei Änderungen an constants.cpp müssen Sie nur constants.cpp neu kompilieren.

Dies hat jedoch einige Nachteile. Erstens werden diese Konstanten jetzt nur in der Datei als Konstanten der Kompilierung betrachtet, in der sie wirklich definiert sind (constants.cpp), und nirgendwo sonst werden sie benutzt. Dies bedeutet, dass sie abgesehen von constants.cpp nicht überall verwendet werden können, wo eine Kompilierungskonstante benötigt wird (wie die Länge eines festen Arrays, über das wir in Kapitel 6 sprechen).


Zweitens kann der Compiler sie möglicherweise nicht so optimieren.

Neue Programmierer sind oft versucht, viele globale Variablen zu verwenden, weil sie einfach zu verwenden sind, insbesondere wenn viele Funktionen beteiligt sind. Die Verwendung von nicht konstanten globalen Variablen sollte jedoch generell vermieden werden! Wir werden im nächsten Abschnitt diskutieren, warum.

Guten Morgen. Zuerst möchte ich Ihnen für Ihr C ++ – Tutorial danken, ich denke wirklich, es ist das beste Handbuch für C ++, das verständlichste und prägnanteste. Und ich verstehe, es ist schwer, ein Gleichgewicht zwischen diesen beiden zu finden. Also möchte ich über meine eigene Erfahrung schreiben Dieser Artikel, und versuche zu verstehen, warum es für mich (und vielleicht auch andere Leute im Kommentarbereich) so schwierig war, es zu verstehen. Vielleicht hilft es, ein paar Korrekturen vorzunehmen, das ist nicht so offensichtlich.

Nun, nachdem (hoffentlich) ich verstanden habe, lese ich diesen Artikel noch einmal und ich sehe mit Erstaunen, dass dieser Artikel völlig korrekt war und dass all das, was mich so viele Probleme aufwarf, schon da war. Also werde ich versuchen zu entschlüsseln, warum ich Schwierigkeiten hatte, es zu verstehen. Einige dieser Punkte mögen für jeden offensichtlich sein, aber ich werde versuchen, so viel Details wie möglich zu schreiben.

1) Im Abschnitt "Interne und externe Verbindung über die Schlüsselwörter statisch und extern" wir lernen, dass wir externe Variablen (sichtbar in anderen Dateien) mit dem Schlüsselwort extern (und standardmäßig für nicht-const) deklarieren. Aber in dieser Phase des Lesens haben wir keine Ahnung, dass es notwendig ist, das Schlüsselwort zu verwenden "extern" zweites Mal – in einer anderen Datei, in der wir es verwenden möchten. Ja, jetzt sehe ich den Satz darüber im nächsten Abschnitt, aber ich kann schwören, dass ich es nicht gesehen habe, während ich es noch einmal gelesen habe Dieser Artikel mehrmals. Ich denke, der Grund ist – nach dem Lesen dieses Abschnitts ("Interne und externe Verbindung …"), Ich denke irgendwie, das ist genug, um eine Variable in anderen Dateien sichtbar zu machen, also wenn ich den nächsten Abschnitt lese ("Variable Forward-Deklarationen über das Schlüsselwort extern") Ich denke, es beschreibt einen anderen völlig separaten Fall (zum Beispiel, wenn wir nicht Variable mit deklarieren Externes Schlüsselwort in einer anderen Datei). Ich denke, das ist der Hauptgrund für mein Missverständnis, und obwohl der Artikel textlich korrekt ist, denke ich, dass der Mangel an Verbindung (kein Wortspiel beabsichtigt) zwischen diesen Abschnitten es wirklich schwierig zu begreifen macht.

2) "Um eine externe globale Variable zu verwenden, die in einer anderen Datei deklariert ist, müssen Sie eine Variable verwenden Vorwärtsdeklaration. Bei Variablen erfolgt die Erstellung einer Forward-Deklaration auch über das Schlüsselwort extern (ohne Initialisierungswert)." – Das ist der Satz, den ich nicht gesehen habe "Sie müssen eine Variable verwenden Vorwärtsdeklaration". Und ich hatte einige Probleme mit dem Wort "auch" des zweiten Satzes. Aus irgendeinem Grund (ich denke, es ist zu weit vom Kontext entfernt) dachte ich "auch" gemein "Dies kann mit oder ohne gemacht werden Externes Schlüsselwort". Jetzt verstehe ich, dass es bedeutet "wie im vorherigen Fall, aus dem vorherigen Abschnitt"aber ich habe es erst bekommen, nachdem ich schon angefangen habe, meine erste Version dieses langen Kommentars zu schreiben und meine Schwierigkeiten beim Verständnis der verschiedenen Sätze beschrieben habe. Erst danach "geklickt" in meinem Kopf – ich habe die ganze Sache völlig verstanden.

3) "Beachten Sie, dass Sie, wenn Sie eine nicht initialisierte nicht initialisierte globale Variable definieren möchten, nicht verwenden Externes Schlüsselwort, sonst denkt C ++, dass Sie versuchen, ein Vorwärtsdeklaration für die Variable." – Es ist nicht so wichtig, aber trotzdem. Ja, es war wahrscheinlich meine Schuld, ich sah keinen Akzent auf das Wort "nicht initialisiert". Ich habe diesen Satz erst nach dem Lesen einer Antwort in den Kommentaren verstanden. Aber jetzt können Sie sich vorstellen, wie verwirrend es für mich war, als ich es zum ersten Mal las, nach all der Verwirrung, die ich zuvor hatte.

Also, ich denke, das sind die Hauptpunkte. Ich hoffe, dass dies helfen kann, diesen Artikel für nachfolgende Leser zu verbessern. Vielen Dank für Ihre Zeit, das Lesen meines Kommentars zu lang und vielen Dank für Ihre Arbeit, die dieses großartige Tutorial für Menschen auf der ganzen Welt verfügbar macht =)