Forum: Mikrocontroller und Digitale Elektronik Variablen - Global oder nicht global!?


von mark (Gast)


Lesenswert?

Hallo zusammen,
hab mal ne allgemeine Fragen: Ein paar Kollegen vo mir deklarieren Ihre 
Variablen in ihren C-Programmen (Keil und PIC) immer global in einer 
Datei (z.B. Variablen.h) - ich dagegen mache die Variablen die ich in 
meinen Progs benütze lieber immer nur in der entsprechende klasse 
bekannt (so wie ich es eigentlich auch gelernt habe).
Nun kam der Einwand dass das unübersichtlicher ist als alles zusammen zu 
deklarieren, und wenn man alle Variablen sowieso in der gleichen Datei 
deklariert, ist das eh egal ob global oder nicht . daher meine Frage - 
wie macht Ihr das in Euren C-Programmen - deklariert Ihr auch alles 
global oder noch schön klassisch indem Ihr die Variablen nur in den 
Klassen bekannt gebt, in dennen Ihr sie auch braucht?

So langsam habe ich das gefühl dass ich der einzigste bin, der das noch 
macht, deswegen dachte ich, ich muss mal nachfragen wie das die 
Allgemeinheit hält!

Danke und GRuß

von johnny.m (Gast)


Lesenswert?

1.: In C gibt es keine Klassen...
2.: Ich persönlich verwende globale Variablen bei der 
Embedded-Programmierung eigentlich nur dann, wenn es mit lokalen 
Variablen kein Weiterkommen gibt, also z.B. zum Datenaustausch mit 
Interrupt-Handlern, die ja nunmal keine Werte zurückgeben können. 
Globale Variablen blockieren statisch Speicherplatz, der gerade bei 
Embedded-Systemen wertvoll ist und demzufolge nicht unnötig verplempert 
werden sollte. Variablen deklariere ich grundsätzlich mit dem 
kleinstmöglichen Gültigkeitsbereich.

von Falk (Gast)


Lesenswert?

@mark

>hab mal ne allgemeine Fragen: Ein paar Kollegen vo mir deklarieren Ihre
>Variablen in ihren C-Programmen (Keil und PIC) immer global in einer
>Datei (z.B. Variablen.h) - ich dagegen mache die Variablen die ich in

Sind sicher ältere Kollegen . . .;-)

>meinen Progs benütze lieber immer nur in der entsprechende klasse
>bekannt (so wie ich es eigentlich auch gelernt habe).

>Nun kam der Einwand dass das unübersichtlicher ist als alles zusammen zu
>deklarieren, und wenn man alle Variablen sowieso in der gleichen Datei

Quark. Genau anders herum wird ein Schuh draus! Möglichst wenige globale 
Variablen benutzen!

Denn die meisten Variablen werden nur lokal von den Funktionen benutzt 
(Schleifenzähler, Zwischenpsiecher etc.). Wenn amnnur globale Variablen 
nutzt, ist ratz-Fatz der Überblick hin und der globale Namensraum 
verdreckt.

>So langsam habe ich das gefühl dass ich der einzigste bin, der das noch
>macht, deswegen dachte ich, ich muss mal nachfragen wie das die

FALSCH! Du bist der einzige, der es nach neuer, besserer Art richtig 
macht. Stichwort Kapselung, Modularisierung!

MFG
Falk

von Oliver (Gast)


Lesenswert?

Wenn das ganze Programm sowieso auf eine Seite (und damit in eine 
Datei)passt, dann packe ich die Variablen auch gleich mit rein.

Aber ansonsten schön nach Modulen, mit (hoffentlich) sauberen 
Schnittstellen, in der entsprechende Header-Datei. Und nur, wenn es gar 
nicht ohne globale Variablen geht, die main zugeordnet sind, nehme ich 
ausnahmsweise sowas wie globals.h. Normalerweise braucht man sowas nur, 
wenn die Module nicht sauber getrennt sind.

Ist aber nur meine persönliche Meinung. Das (semi-)professionelle 
Programmieren im Uni-Umfeld habe ich schon lange hinter mir, aber selbst 
bei meinen kleinen Hobby-Spielereien rächt sich jede unsaubere 
Schnittstelle zwischen den Modulen früher oder später.

Oliver
(P.S. Das gilt natürlich alles nur für C. In C++ sollte sich die Frage 
gar nicht stellen, und in Basic programmiert man einfach nicht...)

von johnny.m (Gast)


Lesenswert?

> ...und in Basic programmiert man einfach nicht...
Der war gut!

von Peter D. (peda)


Lesenswert?

johnny.m wrote:
>
> Variablen deklariere ich grundsätzlich mit dem
> kleinstmöglichen Gültigkeitsbereich.


Jau, so und nicht anders.

Global oder statisch lokal nur dort, wo es unbedingt sein muß.


Peter

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.