Frank schrieb:
> Wie macht man das am besten? Schon über der main-funktion als volatile
> deklarieren? Dann wären die ja quasi in jeder anderen funktion sichtbar
> und könnten verändert werden, oder durch doppelte bezeichnung ein
> fehler.
> oder erst in der funktion test() selber?
> Dann würden die ja jedesmal beim funktionsaufruf deklariert
Das kann Laufzeit kosten. Wenn man genug Speicher hat, dann kann man die
Variable ausserhalb der Funktion deklarieren. Der Speicherplatz ist dann
das ganze Programm hindurch belegt.
Deklariert man innerhalb der Funktion und hat die Funktion sonst keine
lokalen Variablen, und diese Variablen werden auch nicht als Register
wegoptimiert, dann wäre ein ADD SP,+4 und SUB SP,+4 oder so nötig, also
zusätzliche Instruktionen und zusätzliche Laufzeit, ausserden erfolgen
die Zugriffe dann an absolute Adressen und nicht relativ zum
Spackpointer, was je nach Prozessor ebenfalls mehr Laufzeit kosten kann.
Also: Im Prinzip immer lokal definieren. In Ausnahmefällen kann es nötig
sein, static lokal zu definieren. Ein Game-Of-Life das ich mal für
Windows 3.1 geschrieben hatte, hat IMMENS davon profitiert, daß das
Board statt relativ adressiert einfach static deklariert wurde, das war
der Unterschied zwischen lahmarschig und rasend schnell. Global zu
definieren ist nie nötig wenn man den Wert nur innerhalb einer Funktion
braucht und verwenden will.
> und initialisiert werden, wodurch das eigentlich unsinnig wird.
Kommt drauf an.
So eine Funktion wird ja hoffentlich mehr als bloss 1 mal aufgerufen.
Wenn dann JEDESMAL beim Eintritt der Wert (auf 0) initialisiert werden
soll/muss, und nicht mit dem Wert vom vorherigen Lauf weitergerechnet
werden kann/darf, dann musst du SOWIESO am Anfang der Funktion ein
schreiben, das eine mal bei
1 | volatile unsigned int test1 = 0;
|
reicht dann nicht.