" La desorganisation du code et les possibles conflits de noms, c'est le seul desavantages aux variables globales ? "
En gros oui mais c'est déjà non négligeable. A noter aussi que lorsque l'on définit plusieurs variables globales dans plusieurs fichiers différents leur ordre d'initialisation n'est pas défini (dans un seul fichier elles sont initialisées dans l'ordre où elles apparaissent mais l'on ne sait pas si les variable du fichier x seront initialisées avant celles du fichier y ou vice versa), encore que ça ce n'est pas forcément gênant.
Au passage j'en profite pour signaler que l'on peut régler les problèmes de conflit entre les variables globales et locales grâce a l'opérateur de résolution de portée ( :: ), exemple :
int var = 0; // variable globale
void fonction()
{
int var = 0; // variable locale
var = 2; // assigne 2 à la variable locale
::var = 7; // assigne 7 à la variable globale
}
Si l'on ne met rien à gauche de l'opérateur "::" on fait référence à la portée globale. Mais c'est quand même mieux d'éviter ce genre de conflit.