Die Ideale Variante währe (so wird das auch von den C Standard Funktionen gemacht):
Code:int * mess(int *arr, int length) { //Array befüllen und dabei length beachten return arr; }
Werbung
Die Ideale Variante währe (so wird das auch von den C Standard Funktionen gemacht):
Code:int * mess(int *arr, int length) { //Array befüllen und dabei length beachten return arr; }
Wir programmieren hier für einem Arduino. Da sind globale Variablen einfach praktisch.
Wer schon mal größere objektoorientierte Programme geschrieben hat, weiß das das Gefahren birgt.
Je größer ein Arduino Sketch, desto unübersichtlicher. Die Probleme fangen an, wenn man nicht mehr weiß, wie groß z.B. ein Variablenfeld ist und über die Feldgrenzen hinweg schreibt oder ließt. Oder wenn sich ein zweiter Programmierer über den Code hermacht.
Aber für einfachere Sketches finde ich es durchaus empfehlenswert mit globalen Variablen zu arbeiten.
Wenn man seinen Code anständig kommentiert, und sprechende Namen vergibt, ist es für mich ok.
Es ist halt auch die schnellste Variante, da die Variablen global erhalten bleiben und keine Parameter übergeben werden.
Da hat halt jeder hat seinen eigenen Stil.
Globale Variablen würde ich nicht als eigenen Stil sondern als sehr schlechte Angewohnheit bezeichen, besonders wenn die Alternative kaum Mehraufwand bedeutet.
Also Regel würde ich mal sagen: so lokal wie möglich, so global wie nötig. Also wenn ich eine Variable nur in einer Funktion brauche, dann deklare ich die auch nur dort, usw.
Ich sehe einen Arduino Sketch so:
ist etwa das gleiche wie:Code:void loop() { ... }
Wenn nun Variablen in der Loop- (oder While-) Schleife gebraucht werden, deklariere ich sie außerhalb. Innerhalb würde bedeuten, dass sie in jedem neuen Durchlauf weggeschmissen und neu erstellt werden müssen (Stack). In diesem Fall entscheide ich mich also ganz bewußt für diese Vorgehensweise, nicht aus schlechter Gewohnheit.Code:while(1) { ... }
Im Allgemeinen stimme ich aber shedepe in allen Punkten zu.
Touché!![]()
Außerdem würde ich den Fall des Arduinos nur halb gelten lassen. Letztendlich ist es ja nichts anderes als eine while(1) Schleife im Hintergrund bei der ständig die Funktion loop() aufgerufen wird. Es kommt eher selten vor, dass man solche Programmierkonstrukte hat die man nicht selber beeinflussen kann. Sonst könnte man auch der Funktion loop die passenden Argumente übergeben oder sich die Funktion gleich sparen.
Lesezeichen