Alternativa ao uso de variáveis globais em C

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.

Copyright © 2018 Luis Tavares. Todos os direitos reservados