[Prévia cron] [Próxima Cron] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto] [Índice de autor]

Re: static



>Opa... 17 usos ?

    Digamos que eu exagerei um pouquinho e usei um certo número cabalístico
exclusivo do BCC-2000... ;-] Mas é que eu sempre achei que os diversos usos
são meio independentes entre si (não custava ter uma outra keyword)...

>Meu caso é de variáveis globais uqe não podem ser acessadas de fora do
arquivo.

    Acho, então, que você precisa é da keyword "extern". Variáveis globais
são static por default, isto é, duram do começo ao fim do programa
(independente do scope, que é global). Mas se você usa a bendita palavrinha
"static", ela ganha linkedição interna, isto é, não é acessível de outros
módulos! É isto que eu quis dizer acima, trata-se de um "efeito colateral"
desta keyword.

    Na minha opinião, a melhor estrátégia para compartilhar variáveis sem
problemas é a seguinte:

- colocar a definição global _sem a keyword static_ em um dos módulos
(digamos, unit1.c)
- colocar no header deste módulo (unit1.h) a declaração com extern
- incluir este header nos outros módulos

    Assim, por exemplo:

UNIT1.C
======
#include "unit1.h"
int Teste;
main()...

UNIT1.H
======
extern int Teste;

UNIT2.C
======
#include "unit1.h"
 /* pode usar Teste */

    Com esta técnica, a variável Teste fica disponível para todos os módulos
que incluirem UNIT1.H, inclusive, obviamente, UNIT1.C, sem gerar conflitos.
Note que há uma diferença entre C e C++ caso você resolva ainda assim usar a
keyword "static": em C, a combinação do static com o extern gera linkedição
interna, e em C++, externa. Ou seja: não use static em varíaveis que quiser
exportar!

Rubens

P.S.: isto aí vem da minha memória e do uso a que estou acostumado, talvez
alguém tenha técnicas e/ou explicações melhores...