Forum: Mikrocontroller und Digitale Elektronik Variable in Unterprogramm (C)


von Holger (Gast)


Lesenswert?

Hallo,

um die Übersichtlichkeit in meinem Programm zu erhöhen und es leichter 
zu handhaben gliedere ich gerade einige Programmabschnitte in 
Unterprogramme aus.

Nun habe ich aber eine Variablen, die sich nicht bei jedem 
Unterprogrammaufruf neu initialisieren sollen, wie zum Beispiel Zähler, 
die pro Aufruf eins hinzuaddieren.

Gibt es eine Möglichkeit in C, die eine Variable nur initialisiert, wenn 
sie es noch nicht ist?

Im Sinne von:
1
 
2
void unterprogramm(void)
3
{
4
   if( !is_initialisiert(counter))
5
      uint8_t counter = 0;
6
}

Andere Möglichkeiten wären natürlich die Variable als volatile außerhalb 
des Programms zu deklarieren oder sie an das Überliegende Programm per 
return zu übergeben.
Ersteres soll sich ja schlecht auf die Performance auswirken, zweiteres 
hätte eigentlich nur den Nachteil, dass man vergessen könnte, die 
Variable raus zu nehmen, wenn man das Unterprogramm entfernt.

Wie wird sowas in der Praxis gehandhabt?
Wie mache ich es am effektivsten?

Gruß

von Miška (Gast)


Lesenswert?

1
void unterprogramm(void)
2
{
3
   static int counter = 0;
4
5
   ++counter;  // und so weiter...
6
}

von Holger (Gast)


Lesenswert?

Herzlichen Dank! :)

von Karl H. (kbuchegg)


Lesenswert?

Holger schrieb:

> Wie mache ich es am effektivsten?

Ich kanns nicht lassen.

Am effektivsten machst du das, in dem du dir ein C-Buch holst und lernst 
welche Möglichkeiten dir die Sprache eigentlich zu bieten hat.

von Udo S. (urschmitt)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich kanns nicht lassen.
>
> Am effektivsten machst du das, in dem du dir ein C-Buch holst und lernst
> welche Möglichkeiten dir die Sprache eigentlich zu bieten hat.

Präzisieren wir das noch etwas:
Schau mal in deinem C Buch nach Pointer bzw Zeiger.
Übergebe dem Unterprogramm die Adresse des im übergeordneten Programm 
definierten Zählers und lasse den Zähler dann in dem Unterprogramm 
hochzählen.
Hat den Vorteil daß der Zähler auch im übergeordneten Programm sichtbar 
ist und sogar in verschiedenen Unterprogrammen benutzt werden kann
Das ist eine tolle Übung um Zeiger verstehen zu lernen.

von Walter S. (avatar)


Lesenswert?

Holger schrieb:
> Andere Möglichkeiten wären natürlich die Variable als volatile außerhalb
> des Programms zu deklarieren

volatile ist eine ganz andere Baustelle ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.