?
camper schrieb:
Ein nicht-lokales static beeinflusst nicht die Lebensdauer eines Objektes sondern nur die Sichtbarkeit des Namens. Ein solches als static deklariertes Objekt existiert für jede Übersetzungseinheit, die es deklariert, separat, während im Falle von external linakge der Name in allen Übersetzungseinheit auf ein und dasselbe Objekt verweist. Nichts daran hindert dich daran, ein in einer anderen Übersetzungseinheit definiertes static-Objekt zu benutzen, soweit dies auf anderem Wege als über dessen Namen geschieht. Im Übrigen ist
short** DemoArray = NULL;
eine Definition und darf nicht im Header erfolgen - dort sollte nur die Deklaration
extern short** DemoArray;
stehen.
Anzumerken ist, dass static bei nicht-lokalen Bezeichnern nicht mehr erwünscht ist - unbenannte Namensräume sind eine bessere Alternative (u.a. können Zeiger auf static-Objekte nicht als Templateargumente eingesetzt werden).
Wenn die globale Variable DemoArray im Header mit extern deklariert wird,
dann findet der Linker von selber heraus, wo sie definiert ist? Wird durch so eine extern-Deklaration eine globale static Variable auch in anderen Quelldateien als in jener sichtbar, in der sie definiert ist? Dann könnte ich mir den Umweg mit dem indirekten Zugriff über die Zeiger womoeglich sparen?
Mein momentanes Projekt hat sich ziemlich ausgewachsen (4000 Codezeilen in einer einzigen Quelldatei...), und jetzt versuche ich das Ding etwas zu modularisieren. Leider sind einige relativ komplexe Funktionen dabei, für die ein Satz globaler Variablen überaus wichtig ist, auf die sie alle Zugriff haben müssen. Ich kenn' mich mit Klassen leider nicht sonderlich gut aus, sonst wäre es wohl geschickter, die Variablen und Funktionen in einer Klasse zusammen zu fassen ...
Besten Dank für den Tipp mit extern!