In C public non esiste.
In ogni caso: in generale evita le variabili globali, usale solo se sono costanti di configurazione a cui non assegnerai mai un valore in esecuzione.
Aggiungere un parametro ad una funzione ti permette inoltre di generalizzarla e poterla riutilizzare in più ambiti. Un altro svantaggio delle variabili globali è appunto quello di non poter essere usate su strutture/variabili diverse.
Per i problemi di performance, l'aggiunta di un parametro passato come puntatore/referenza risulta in un lieve impatto sulle performance e in un grande guadagno di flessibilità/riutilizzo.
Pensa anche al futuro non solo ad ora, l'utilizzo di variabili globali introduce varie complicazioni anche nella lettura e comprensione del codice...
Le variabili globali non sono sempre più performanti, ciò varia da linguaggio a linguaggio e da implementazione a implementazione.
Esempio banale:
Lua (linguaggio di scripting) permette tranquillamente l'uso di più interpreti in parallelo in uno stesso programma in quanto tutto ciò che gli serve è contenuto in una struttura passata come argomento alle funzioni.
CPython sembra permettere l'uso di più interpreti in parallelo, che in realtà non funzionano in parallelo in quanto un solo pezzo di codice viene eseguito alla volta e i vari processi si contendono l'uso dell'interprete, questo per l'utilizzo di variabili globali...