Frage


Ich habe eine Frage über die Verwendung von #undef neu zu definieren Makros.
Ich habe eine Datei global.h, die eine Reihe von # enthalten define-d-Makros. In dem Code, der dieses Makros verwendet, finde ich, dass die Werte, dass die Makros halten sind nicht allgemein genug. Ich möchte die Makros neu zu definieren, um sie Generika zu machen. Ich schrieb den folgenden Code-Schnipsel zu tun genau das:

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

Meine Fragen sind:
Wird mit einem #undef auf diese Weise sicherzustellen, Neudefinition des Makros in allen Quelldateien, oder ist es lokal für die Funktion, wo die obigen Zeilen Code geschrieben werden? Was ist der Umfang der #undef und #define Betreiber?
Was kann ich tun (außer die Makros in der Datei ändert, wo sie sind # define-d selbst), um sicherzustellen, dass die Makrodefinitionen in allen Quelldateien geändert werden?
Danke,
Sriram

War es hilfreich?

Lösung

#ifdef ist eine Präprozessordirektive, bedeutet dies, dass es angewendet wird, bevor Sie Ihren Quellcode kompiliert wird. Es bedeutet, dass nur der Quellcode ‚unten‘ betroffen sein wird. Wenn Sie Ihren Quellcode durch den Präprozessor laufen Sie in der Lage sein, das Ergebnis zu sehen. Das gibt Ihnen mehr Einblick in die Funktionsweise des Vorprozessors.

Andere Tipps

Der Umfang des #undef Betreibers ist die gesamte Datei, nachdem es aufgerufen wird. Dazu gehören alle Dateien, die es enthalten (weil der Präprozessor nur Ketten, die Dateien zusammen.) Weil es Teil des Vorprozessors ist es nicht seltsam Dinge wie Umfang haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top