Wenn der Compiler die "INITDIRECT3D.H" kompiliert, fällt das "extern" weg, d. h. für "INITDIRECT3D.CPP" ist "g_pD3D" eine ganz normale Variable.
Für alle anderen "cpp"-Dateien ist "g_pD3D" eine externe Variable, das muss so sein, denn eine Variable darf ja nicht doppelt deklariert werden.
die deklaration als "extern" ist mir nur gelüfig wenn eine variable zB in datei1.cpp definiert wird und dann in datei2.cpp als extern deklariert wird um sie in datei2.cpp ansprechen zu können.
Das ist hier ja genau der Fall! "g_pD3D" ist in "INITDIRECT3D.CPP" als Variable deklariert und damit sie auch in anderen "cpp"-Dateien angesprochen werden kann, wird sie für andere Dateien als "extern" deklariert.
Man kann es auch anders machen, denn eine bereits deklarierte Variable darf in derselben Datei auch zusätzliches mal, diesmal als "extern" deklariert werden, z.B.:
CPP1.cpp:
|
Quellcode
|
1
2
|
#include "HEADER.h"
int GlobalVar = 0;
|
CPP2.cpp:
|
Quellcode
|
1
2
3
4
5
|
#include "HEADER.h"
void func ()
{
GlobalVar = 5;
}
|
Header.h:
|
Quellcode
|
1
|
extern int GlobalVar;
|