Was ist der Unterschied zwischen globalen Variablen und #define in c
Was ist der Grund, warum es gibt 2 Möglichkeiten :
- Globale Variablen
- symbolische Konstanten mit
#define
?
Damit ich weiß, was #define
tut, aber ich weiß nicht, was der Unterschied in der Nutzung ist.
Die situation, die ich tun muss damit ich in der Lage bin, zu entscheiden, mich auf den richtigen opportunitie? Was ist eine der Gelegenheiten, in der Lage zu tun, was die andere nicht ? Ich hoffe, ich konnte verdeutlichen, was ich meine.
- Globale Variablen können abgerufen und bearbeitet werden-von überall. #define-Konstanten können nicht editiert werden, nur Lesen. Es hat zu tun mit der thread-Sicherheit und der Rückkehr von Funktionen.
- "Ich weiß, was ein #define macht" Sicher? 😉 Aber das Lesen dieses gcc.gnu.org/onlinedocs/cpp kann Ihnen helfen, erleuchtet zu werden.
- Ein
global
variable ist eine variable, die Sie ändern können, ist es Wert, es sei denn, Sie machen es zu einemconst
,#define
ist fester Wert. Es kann nicht geändert werden. - Es ist auch nicht unbedingt ein "Wert".
- #define erfolgt durch den Präprozessor. Es ist nur nur-text-substitution in einem gewissen Sinn. Im Falle von Fehlern, wo Ihr #define-Direktive eingebunden ist der compiler nicht in der Lage sein, um es herauszufinden, und du wirst am Ende mit "kryptischen" Fehlermeldungen. Präprozessor-Direktiven haben Ihren Platz, aber manchmal ist es wahrscheinlich besser, nur stick "
const globals
- Dies ist ein Duplikat zu diesem: stackoverflow.com/q/1674032/694576 oder dieses: stackoverflow.com/q/2611063/694576
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, Globale Variablen können bearbeitet werden-von überall.
Grundsätzlich, in der niedrigen Ebene, werden Variablen gespeichert im RAM-Speicher und erstellt nach dem Start der Anwendung, es hat immer eine Adresse im RAM. Definiert werden, sind nur Makros mit dem compiler wird ersetzen Sie einfach Ihren Namen definieren, die mit den Werten in der Zusammenstellung Schritt.
#define
können nicht bearbeitet werden, es ist nur ein Makros. Und#define
ist nicht nur über die Werte, die Sie definieren können fast alles, was Sie wollen, zum Beispiel:Und in den meisten Situationen definiert werden benutzt, um einige OS-spezifische oder hardware-spezifische Werte. Es ist ein wirklich mächtiges Ding, weil es Ihnen die Gelegenheit gibt, Dinge zu ändern, die dynamisch in die Zusammenstellung Schritt. Zum Beispiel:
#define PRINT_THE_HELLO_DEFINES printf("hello defines!\n");
undvoid main(){ PRINT_THE_HELLO_DEFINES }
, dann ist dein code ersetzt werden, wie:void main(){ printf("hello defines!\n"); }
. Also definiert werden, sind zu ersetzen stopft.Betrachten dieses kleine Beispiel
num
ist ein makro undnumber
ist eine Globale variable.Ein wichtiger Unterschied ist, dass
num
ist nicht im Speicher abgelegt,num
ist nur der Ersatz für die 5, abernumber
Speicher verwendet.Auch, Makros sind Präprozessor-Direktiven, Ihre Werte können nicht geändert werden wie Variablen.
So, Nein tut
später im code. Verwenden Sie
#undef
zu löschen es und legen es erneut um den Wert zu ändern.#undef
Präprozessor-Direktive).Globale Variablen zugegriffen werden kann und bearbeitet von überall. #define-Konstanten können nicht editiert werden, nur Lesen.
Beispiele:
Verwenden wir
#define ERROR 666
zu definieren, die ein Programmierer pre-compile-Zeit-Konstante für einen Fehler, das ganze Programm.Verwenden wir eine Globale variable für eine zu zählen, wie viele Operationen, die eine Funktion haben und dieser Wert kann gelesen werden von anderen Funktionen als gut.
Gibt es keinen Punkt, um die Fehler als eine Globale variable, da sollte es nicht bearbeitet werden und Sie können nicht die
#define x
als Zähler.#define
deklariert ist auf der Oberseite der code, bedeutet es, dass vor der Deklaration der Klasse. Und es dient als zu definieren (wie der name schon sagt) eine Konstante, die können gelesen werden, aber nicht verändert werden.Einer globalen variable kann Global zugegriffen werden, die auf dem code, und zur gleichen Zeit geändert.
#define
kann auf jede Zeile einer Datei, die gehen, um zugeführt zu der C pre-Prozessor.