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.
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?
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.