O uso de variáveis globais em linguagem C não é recomendado, pois facilita a ocorrência de alguns problemas e dificulta a localização de erros no código fonte. Como as variáveis são públicas durante toda a execução do programa, elas podem ser alteradas a qualquer momento no mesmo sem termos qualquer controle sobre isto.
O que vou apresentar neste post é uma alternativa simples ao uso de variáveis globais. Esta alternativa consiste em declarar como variáveis locais em um arquivo C, as variáveis que seriam globais. Veja o código a seguir:
/*
* data_access.c
*/
static int data1 = 0;
static int data2 = 0;
int getData1(){
return data1;
}
void setData1(int d1){
data1 = d1;
}
int getData2(){
return data2;
}
void setData2(int d2){
data2 = d2;
}
Através do static limitamos o acesso às variáveis apenas para as funções do arquivo no qual as variáveis foram declaradas. Depois criamos funções para acessá-las (get e set) e deixamos o protótipo dessas funções em um arquivo header (.h). Veja na sequência o arquivo header:
/*
* data_access.h
*/
#ifndef DATA_ACCESS_H_
#define DATA_ACCESS_H_
int getData1();
void setData1(int d1);
int getData2();
void setData2(int d2);
#endif /* DATA_ACCESS_H_ */
E então, incluímos este .h em todos os nossos módulos que vão acessar as variáveis. Este acesso às variáveis é feito através das funções get e set que criamos e não diretamente, pois as variáveis não são visíveis fora do módulo C que criamos. Veja um exemplo de código acessando as variáveis:
#include <stdio.h>
#include "data_access.h"
int main (void){
printf("data 1: %d\n", getData1());
setData2(5);
printf("data 2: %d\n", getData2());
return 0;
}
Fazendo o acesso através de funções temos muito mais segurança no nosso código, pois podemos controlar os momentos em que estas variáveis são acessadas e limitar para que as funções de acesso somente sejam visíveis nos módulos que efetivamente precisem. Usando variáveis globais qualquer parte do programa pode acessar e alterar as variáveis sem termos nenhum controle sobre isso.