mikrocontroller.net

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


Autor: mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: johnny.m (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.