Powody używania zmiennych globalnych, zamiast lokalnych:
1. Wartość zmiennych globalnych, także tablic, otrzymuje wartość zero.
2. Zmienne widoczne są w całym programie i w podprogramach [funkcjach].
3. Tablicę globalną, można zadeklarować większe niż lokalną, w ciele main().
4. Inne, niewiedza, złe przyzwyczjenie ...
AD 1
To zwykłe lenistwo a także niewiedza. W C++ możemy deklarować zmienne, w bezpośrednim miejscu poprzedzającym użycie zmiennej i możemy nadać zmiennej żądaną wartość początkową: np: int i = 0;
Jeżeli chodzi o tablice, możemy zrobić to w pętli [nadać elementom początkową wartość], ale można także w taki sposób:
int tabA[1000] = {0} - kompilator nada pierwszemu elementowi tablicy wartość 0, a pozostałym, ponieważ nie ma podanych, wszystkie wyzeruje. W tej metodzie, możemy też np tak:
int tabB[12345] = {0, 1, 1, 2, 3, 5} Tutaj pierwsze elementu [np. tutaj 5] uzyskają podaną wartość, a pozostałe zostaną wyzerowane.
Jeżeli zrobimy to tak:
int tabC[54321]; to w tablicy znajdą się na pewno oprócz zer także "śmieci".
Warto jeszcze wspomnieć o takiej deklaracji:
int tabD[] = {1, 2, 3, 4, 5};
I jeszcze jedno:
main(){
int n;
cin >> n;
int tabE[n]; <-- jest błędem, chociaż dla małych wartości n, może i działa [e gcc] prawidłowo
....
Dodatkowo, z mojego doświadczenia, wydaje mi się, że dostęp i operacje na tablicy globalnej są wolniejsze od operacji na takiej samej lokalnej.
AD 2
Tutaj nie mam argumentów przeciw, ale wygoda okupiona jest gorszą czytelnością programu i może prowadzić do nieprzewidzianych zachowań programu. np:
int i;
main(){
int i;
for(int i = 0; ......}{
...
}
if (i == 1) .... //o które tu "i" programiście chodziło?
...
AD 3
Fak. Dużą statyczną tablicę globalną, można zadeklarować dużo większą od statycznej lokalnej. Oczywiście, można też zadeklarować b. dużą tablicę lokalną, program się skompiluje, ale po uruchomieniu zaraz się "wysypie".
Zamiast tego [dużej tablicy globalnej], możemy użyć lokalnej tablicy deklarowanej dynamicznie lub tablicy zbudowanej na bazie obiektu klasy lub [c++>c11] z biblioteki STL.
AD 4
Nie wiem co tu napisać, jeżeli ktoś tak robi to należy mu wybaczyć, bo nie wie co czyni. Ja staram się od jakiegoś czasu unikać wszelkich zmiennych globalnych jak diabeł unika święconej wody 
...
Jeżeli chciałbyś coś dodać lub uzupełnić, bardzo proszę i zachęcam.
PS
Pisałem o C++, ale dotyczy to w dużym stopniu, także innych języków programowania.