5 Stimmen

Geltungsbereich von #undef C++

Ich habe eine Frage zur Verwendung von #undef um Makros umzudefinieren.
Ich habe eine Datei global.h die eine Reihe von #define-d-Makros enthält. In dem Code, der diese Makros verwendet, finde ich, dass die Werte, die die Makros enthalten, nicht allgemein genug sind. Ich möchte die Makros umdefinieren, um sie allgemeiner zu machen. Zu diesem Zweck habe ich den folgenden Codeschnipsel geschrieben:

 std::cout << endl << "Enter pitch threshold:" << endl;  
 std::cin >> pitchT;  
 #ifdef PitchThreshold  
  #undef PitchThreshold  
  #define PitchThreshold pitchT   
  #endif  

Meine Fragen sind:
Stellt die Verwendung von #undef auf diese Weise sicher, dass das Makro in allen Quelldateien neu definiert wird, oder gilt dies nur für die Funktion, in der die oben genannten Codezeilen geschrieben werden? Was ist der Anwendungsbereich der #undef- und #define-Operatoren?
Was kann ich tun (abgesehen von der Änderung der Makros in der Datei, in der sie #define-d selbst sind), um sicherzustellen, dass die Makrodefinitionen in allen Quelldateien geändert werden?
Danke,
Sriram

11voto

Sebastiaan M Punkte 5515

#ifdef eine Präprozessor-Direktive ist, bedeutet dies, dass sie angewendet wird, bevor Ihr Quellcode kompiliert wird. Dies bedeutet, dass nur der Quellcode "darunter" betroffen ist. Wenn Sie Ihren Quellcode durch den Präprozessor laufen lassen, können Sie das Ergebnis sehen. Das gibt Ihnen einen besseren Einblick in die Funktionsweise des Präprozessors.

2voto

OmnipotentEntity Punkte 15723

Der Geltungsbereich des #undef-Operators ist die gesamte Datei nach seinem Aufruf. Das schließt alle Dateien ein, die den Operator enthalten (weil der Präprozessor die Dateien einfach aneinanderreiht). Weil er Teil des Präprozessors ist, hat er keine seltsamen Dinge wie den Geltungsbereich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X