Ao
tentar manter um mínimo de portabilidade do código para os diferentes
compiladores que podem ser usados, um caso interessante surge, quando se
pretende usar o recurso de uma variável em mais de um arquivo utilizando
extern, com isto o item terá sua ligação com os diversos módulos que fazem
referencia. Os compiladores modernos conseguem ignorar este cuidado e fazem o
recurso funcionar sem que você tenha essa preocupação em declarar uma variável
externa. Como esta característica não é padronizada, não há garantias de seu
correto uso, o padrão ANSI deve ser usado para manter compatível com os diversos
casos.
Uma
forma de garantir o comportamento da variável é garantir que seja declarada em
um modulo e indicada como extern nos demais. Podemos conseguir este efeito com
o auxilio do pré-processador de macros usando um arquivo cabeçalho. No modo
tradicional temos:
MAIN.C DUMMY1.C DUMMY2.C
char letra;
|
extern char letra;
|
extern char letra;
|
Os macros usados a seguir têm
como objetivo facilitar a declaração e o uso de variáveis globais nos vários módulos
do programa.
MAIN.H
#ifdef
__MAIN_C__
#define EXTERN
#else
#define EXTERN
extern
#endif
EXTERN char g_cLetra;
|
Usando a macro EXTERN, no
primeiro momento pode parecer confuso o uso do macro, mas a ideia consiste em
usar o pré-processador de macros para fazer o trabalho de declaração.
Inicialmente temos a seguinte apresentação:
MAIN.C DUMMY1.C DUMMY2.C
#include "main.h"
#define
__MAIN_C__
|
#include "main.h"
|
#include "main.h"
|
Quando
o pré-processador executar a macro, o arquivo que estiver definido como
__MAIN_C__ ira incluir a variável 'EXTERN
char g_cLetra', como 'char g_cLetra', os
demais arquivos incluem a variável como 'extern char letra', o resultado ficou igual ao do modo tradicional.
A principio pode parecer mais trabalhoso e
seria caso o numero de variáveis globais compartilhada em vários módulos
fossem apenas uma ou duas, quando o numero de variáveis
globais e módulos passa a crescer, a vantagem fica obvia com um só local para declaração
tornando mais fácil compreender, organizar e manter o código.
Nenhum comentário:
Postar um comentário