Hallo Markus,
Was soll ich nun davon halten?
Du solltest Variablen so deklarieren, wie Du sie brauchst. Der Tipp, von globalen Variablen Abstand zu halten, ist gut gemeint, weil die Praxis, globale Variablen zu verwenden, leicht ausarten kann - allerdings sind globale Variablen nicht per Definition böse oder so etwas.
Du solltest Dir bei einer Funktion immer folgende Frage stellen: Sollte die Funktion _unabhängig_ von jedwedem äußeren Faktor agieren (d.h. nur auf die Parameter achten)? Mal ein Beispiel: Du hast eine Funktion, die eine Zeichenkette umdreht (also aus "hallo" macht sie "ollah"). Diese Funktion sollte natürlich unabhängig sein, d.h. sie sollte _keine_ globalen Variablen verwenden, sondern sich nur auf die übergebenen Parameter verlassen. Wenn Du dagegen aber Threads synchronisieren willst (oder etwas ähnliches), dann sind globale Variablen durchaus sinnvoll - Du wirst eine Funktion, die die Thread-Kommunikation realisiert, niemals außerhalb eines bestimmten Kontexts aufrufen _wollen_. Natürlich kannst Du alle benötigten Variablen im Endeffekt auch als Parameter an alle nötigen Funktionen übergeben - allerdings bringt das keinerlei Vorteil und ich habe das auch noch nie gesehen.
Achja, da Du von Threads sprichst: Threads sollten nie direkt in gemeinsam benutztze [1] Variablen schreiben, ohne vorher irgendwelche Sperrmechanismen zu benutzen (Mutexes, ...) - sonst endet das ziemlich böse.
Viele Grüße,
Christian
[1] Das muss nicht zwangsläufig globale heißen, da man ja auch Zeiger als Funktionsparameter übergeben kann!