Verwendung von #undef in C ++

8

Ich studiere ein Stück Code aus GSL-Bibliotheken und rätsele am Anfang einer Header-Datei um ein paar Zeilen. Ich verstehe, was #undef, #ifdef und so weiter tun, aber was ich nicht verstehe ist, warum haben sie im Grunde die Definition der _BEGIN_DECLS zurückgesetzt und dann weiter und definieren Sie es wieder? Technisch gesehen sollte es keine vorherigen Definitionen geben, oder? Ich meine, diese Dinge sind statisch und unterliegen keinen Veränderungen. Wie auch immer, hier ist der Auszug aus dem Code:

%Vor%     
GKED 11.08.2011, 19:49
quelle

2 Antworten

10

Sie dürfen nicht #define ein Makro definieren, das bereits definiert ist, es sei denn, die Parameterlisten und Ersetzungslisten sind identisch.

Wenn __BEGIN_DECLS zuvor durch etwas anderes als extern "C" { ersetzt wurde, wäre #define __BEGIN_DECLS extern "C" { ungültig und das Programm wäre fehlerhaft.

  

Technisch gesehen sollte es keine vorherigen Definitionen geben, oder?

Es hätte sicher sein können.

    
James McNellis 11.08.2011, 19:50
quelle
2

Nicht wirklich. Wenn eine andere Bibliothek, die Sie anrufen, denselben Namen verwendet, wäre dies bereits definiert.

Da Sie es nicht über eine andere Definition definieren können, rufen Sie zuerst #undef und dann #define auf.

Manchmal ist es angebracht, #ifdef oder #ifndef zu verwenden.

    
Cassio 11.08.2011 19:54
quelle