Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Include-Fallunterscheidung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.01.2014, 16:13 Uhr
banshee



Hallo,

könnte mir jemand netterweise verraten, welchen Zweck und welches Einsatzgebiet dieses Konstrukt hat:


C++:
#ifdef _INITWINDOW_CPP
#undef VAR
#define VAR
#else
#undef VAR
#define VAR extern
#endif

VAR HWND g_hWindow;
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.01.2014, 20:29 Uhr
TOSHMAX



Wenn das ganze in einer Header-Datei steht, sollte es im Endeffekt zu folgendem führen:

C++:
// initwindow.cpp

// #define _INITWINDOW_CPP
// #include <initwindow.h>

#undef VAR
#define VAR

/*VAR*/ HWND g_hWindow;

// main.cpp

// #include <initwindow.h>

#undef VAR
#define VAR extern

/*VAR*/ extern HWND g_hWindow;


In initwindow.cpp wird die Variable also tatsächlich global definiert bzw. initialisiert. Alle anderen Dateien verweisen mittels extern nur auf diese Variable. Das undef ist wahrscheinlich nur zur Sicherheit gedacht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.01.2014, 10:46 Uhr
banshee



Ja, genau so wird es benutzt.
D.h. externe Header-Dateien würden ein undefined symbol werfen, wenn die extern-Deklaration so nicht erzeugt würde?!

Was würde denn passieren, wenn man die Variable immer als extern deklariert, also auch dann, wenn sie in das cpp mit der globalen Definition eingebunden wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.01.2014, 14:07 Uhr
TOSHMAX



Wenn sie immer als extern deklariert wird, würde der Linker ein undefiniertes Symbol erkennen. Wenn das extern allerdings immer weggelassen wird, gäbe es mehrere Definitionen für das gleiche Symbol. Das würde auch zu einem fehler führen ("multiple definition").

Eine globale Variable muss also einmal definiert und initialisiert werden (ohne extern, Speicherplatz wird belegt) und alle anderen Dateien müssen sie als extern deklarieren, damit der Zugriff auf den bereits angelegten Speicherplatz erfolgt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: