Nejhorší je, když v podprogramu modifikujete globální proměnnou za účelem výměny hodnot s jiným podprogramem. Pro toto slouží parametry procedur a funkcí. Sice se vám může zdát, že se zbytečně zavádí další proměnné, ale věřte, že to zbytečné není.
Velké problémy si také můžete způsobit, když používáte globální proměnnou jako pomocnou proměnnou ve dvou podprogramech. V tomto případě může dojít k nechtěné výměně dat mezi podprogramy. Jistě si dokážete představit, co se stane, když si do takové proměnné uložíte v jednom podprogramu nějaký mezivýsledek a ve druhém podprogramu jej pak nechtěně použijete. Takové chyby se velmi těžko hledají a často se nějakou dobu (většinou po dobu testování) vůbec neprojeví.
Pokud použijete v podprogramu globální proměnnou, výrazně omezíte jeho použitelnost. Naproti tomu pokud použijete místo globálních proměnných parametry, vytvoříte podprogram, který je do jisté míry nezávislý na svém okolí. Takový podprogram můžete volat na různých místech programu a s různými hodnotami parametrů. Případně jej můžete použít při řešení dalších projektů.
K používání globálních proměnných v podprogramech může svádět i nevhodně umístěná deklarace. Raději proto deklarujte proměnné vždy bezprostředně před tím blokem kódu, ve kterém je budete používat (netýká se to jenom globálních proměnných, ale i vnořených procedur a funkcí).
Namísto tohoto:
var cislo : integer; procedure necoUdelej(parametr : string); begin {nějaká činnost} end; begin {nějaká činnost s~proměnnou cislo} end.to udělejte takto:
procedure necoUdelej(parametr : string); begin {nějaká činnost} end; var cislo : integer; begin {nějaká činnost s~proměnnou cislo} end.