Chybovník – chyba P310

Nadužívání globálních proměnných

Popis chyby: Chyba spočívá v tom, že se v programu zbytečně užívají globální proměnné (zejména v roli stavových proměnných), které jsou deklarované mimo těla funkcí, a to i tehdy, kdy by se tomu dalo snadno zabránit předáváním lokálních proměnných jako argumentů funkcím, které s nimi potřebují pracovat.

Proč je to špatně? Globální proměnná nemá nijak omezený lexikální rozsah platnosti – jinými slovy je viditelná (a tedy i modifikovatelná kdekoliv, v celém programu). Funkce ji mohou libovolně měnit, a tím měnit také stav celého programu (protože globální proměnná je obvykle užita právě jako stavová proměnná). Když není taková proměnná předávána funkcím jako jejich argument, není zřejmé, která z funkcí ji případně modifikuje, a dá se tedy říci, že programátor ztrácí nad konzistencí hodnoty, uložené v takové proměnné veškerou kontrolu.

Ukázka problematického kódu:
   1 :  #include <stdio.h>
   2 :            
   3 :  int num_steps = 100;
   4 :            
   5 :  void run() {
   6 :       int i;
   7 :  
   8 :       for (i = 0; i < num_steps; i++) {
   9 :            /* zde se provádí nějaký výpočet */
  10 :       }
  11 :  }
  12 :  
  13 :  int main() {
  14 :       run();
  15 :  }

Ukázka správného kódu:
   1 :  #include <stdio.h>
   2 :            
   3 :  void run(int num_steps) {
   4 :       int i;
   5 :  
   6 :       for (i = 0; i < num_steps; i++) {
   7 :            /* zde se provádí nějaký výpočet */
   8 :       }
   9 :  }
  10 :  
  11 :  int main() {
  12 :       int steps = 100;
  13 :       
  14 :       run(steps);
  15 :  }

<< Zpět na chybovník