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% 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.
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.
Tags und Links c++ c-preprocessor preprocessor-directive