photo
+ Responder ao Tópico
Resultados de 1 a 1 de 1

Thread: Visibilidade Escopo e Tempo de Vida de Variáveis

  1. #1 Fechar a publicação
    Senior Member jssuser's Avatar jssuser's Avatar
    Data de afiliação
    Aug 2018
    Postagens
    1,503
    Obrigado
    209
    Agradecimentos 753 Tempos em 473 Postagens
    AssinarAssinar
    subscritar: 0

    Visibilidade Escopo e Tempo de Vida de Variáveis

    Existem dois tipos básicos de escopo: escopo local e escopo global.

    Uma variável declarada fora de todas as funções está localizada no escopo global. O acesso a tais variáveis pode ser feito de qualquer lugar no programa. Estas variáveis são localizadas no conjunto (pool) global de memória, assim seus tempos de vida coincidem com o tempo de vida do programa.

    Uma variável declarada dentro de um bloco (parte do código entre chaves) pertence ao escopo local. Tal variável não é visível (e portanto não é disponível) fora do bloco no qual está definida. O caso mais comum de declaração local é uma variável declarada dentro de uma função. Uma variável declarada localmente está localizada na pilha (stack), e o tempo de vida de tal variável é igual ao tempo de vida da função.

    Já que o escopo de uma variável local é o bloco em que ela está declarada, é possível declarar variáveis com o mesmo nome que variáveis declaradas em outros blocos, mesmo aquelas declaradas em níveis mais acima, até o nível global.

    Exemplo:

    void CalculateLWMA(int rates_total,int prev_calculated,int begin,const double &price[])
    {
    int i,limit;
    static int weightsum=0;
    double sum=0;
    //---
    if(prev_calculated==0)
    {
    limit=MA_Period+begin;
    //--- define valor vazio para primeiras barras limite
    for(i=0; i<limit; i++) LineBuffer[i]=0.0;
    //--- calcula primeiro valor visível
    double firstValue=0;
    for(int i=begin; i<limit; i++)
    {
    int k=i-begin+1;
    weightsum+=k;
    firstValue+=k*price[i];
    }
    firstValue/=(double)weightsum;
    LineBuffer[limit-1]=firstValue;
    }
    else
    {
    limit=prev_calculated-1;
    }

    for(i=limit;i<rates_total;i++)
    {
    sum=0;
    for(int j=0; j<MA_Period; j++) sum+=(MA_Period-j)*price[i-j];
    LineBuffer[i]=sum/weightsum;
    }
    //---
    }

    Preste atenção na variável i, declarada na linha

    for(int i=begin; i<limit; i++)
    {
    int k=i-begin+1;
    weightsum+=k;
    firstValue+=k*price[i];
    }

    Seu escopo é somente o ciclo do for; fora deste ciclo existe uma outra variável com o mesmo nome, declarada no começo da função. Além disso, a variável k está declarada no corpo do loop, seu escopo é o corpo do loop.

    Variáveis locais podem ser declarados com o especificador de acesso static. Neste caso, o compilador tem uma variável no conjunto (pool) global de memória. Portanto, o tempo de vida de uma variável estática é igual ao tempo de vida do programa. Aqui o escopo de tal variável é limitado ao bloco no qual ela está declarada.

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. The Following User Says Thank You to jssuser For This Useful Post:

    Não registrado (1 )

+ Responder ao Tópico

Permissões de postagens

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts