Ich meinte, dass man globale Variablen ohne Funktionen ändern und benutzen kann.
Code liegt immer in Funktionen, selbst die Main ist eine Funktion. Was du meinst ist die Tatsache, dass man eine globale Variable nicht als Funktionsargument mit übergeben musst, da es ja global Definiert ist.
Das bedeutet aber mehr Rechenaufwand, da bei jedem Aufruf der Funktionen der Stack in Anspruch genommen und verzweigt wird
Hier entsteht kein Rechenaufwand in dem sinne, es entsteht Aufwand deine Funktion aufzurufen. Wobei hier das ganze schon wieder etwas verschwimmt, weil moderne Compiler hier mitunter sehr gut Optimieren.
Dadurch kann man das Programm schneller machen, ohne dass man dafür globale Variablen verwenden muss.
Von der Theorie her richtig, in der Praxis aber nicht eindeutig. Wie gesagt, Compiler sind mitunter sehr intelligent und können entsprechend Funktionen als inline behandeln, die so aber nicht deklariert waren. Mit dem angeben von inline zwingst du den Compiler aber dazu, dies zu machen, musst dafür aber wissen, ob dir das wirklich hilft.
Eine globale Variable erspart dir das übergeben per Pointer, es ermöglicht dir aber nicht mehr Kontrolle darüber zu haben, an welchen stellen es verändert wird.
Und dann gibt es da noch die praktische Betrachtung, ob das kopieren von einem Pointer auf den Stack so viel mehr Zeit kostet im vergleich zu der Ausführung der Funktion, sodass es sich lohnt globale Variablen zu nutzen.
Redundanz macht wiederholen unnötig.
quod erat expectandum