Tem"possível utilização de variável não-inicializada 'local_low'".
O que é que diz se
Se a variável for inicializada com qualquer coisa, o aviso desaparece. Mas como pode ver por si próprio, a inicialização da variável 'local_low' neste fragmento de código é desnecessária. Assim, o aviso não interfere em nada com a vida.
Releia as minhas respostas do ponto de vista de um gestor de uma empresa de software que trouxe muitos projectos de software para o mercado.
Caso contrário, permanecendo ao nível de "qualquer programador", não compreenderá qual é o erro.
:) Uma vez que nunca serei o chefe de uma empresa de software, permanecerei para sempre ao nível de "qualquer programador" (ou seja, um programador amador, no meu entender).
...E como o programador amador nunca obtém uma descrição lógica do erro, conclui que ou simplesmente não há erro no seu pedaço de código ou o erro é tão complicado que ninguém o pode descrever na linguagem da lógica. Neste momento, podemos considerar que ambos os lados se entendem, a questão está terminada.
Yedelkin: Se a variável for inicializada com qualquer coisa, o aviso desaparece. Mas, como pode ver por si próprio, a inicialização da variável local_low é redundante neste pedaço de código. Assim, o aviso não interfere em nada com a vida.
Um código concreto é provavelmente sim. mas o compilador terá de ser tão"infalível" quanto possível.
Então, o monitor inflamou-se e disse ao programador: nunca esconda a inicialização atrás de uma condição, nunca use uma variável de laço após o corpo do laço, verifique a divisão por zero, não multiplique as entidades desnecessariamente, não escreva se (a===verdadeiro) ...
A propósito, na Primavera tive formação de Expert Advisors, na qual, tendo lido muita literatura, introduzi condições do tipo if(a). Mas os peritos só começaram a trabalhar depois de eu ter alterado estas condições para condições como se (a===verdadeiro). Agora mal consigo sair deste hábito.
Yedelkin: Mas devido ao uso de interrupção bool-variável na linha 9 logo após a inicialização da variável local_low na linha 8, verifica-se que na linha 15 a variável local_low terá a garantia de ser inicializada. Assim, neste ponto, o aviso "possível utilização da variável não inicializada 'local_low'" não significa "garantida" mas apenas a possível presença de um ramo de passagem em que a variável não é inicializada.
No seu exemplo, se Ac-k=0 , o para operador não será de todo executado e o local_baixo será garantido não-inicializado. Ou será errado?
Se enviarmos um pedido para modificar uma posição com as mesmas paragens, receberemos um erro. Mas se enviar um pedido para modificar uma ordem pendente com os mesmos parâmetros, o pedido será executado. É assim que o planeámos e não precisamos de verificar os parâmetros para alterações?
Porquê entupir o servidor com pedidos desnecessários, por exemplo, em caso de erro no Expert Advisor ou lógica incorrecta do seu funcionamento?
Valmars: No seu exemplo, se Ac-k=0 , então a declaração para declaração não será executada de todo e o local_baixo é garantido não-inicializado. Ou será errado?
É exactamente isso. Se Ac-k<=1, o para operador não deve ser executado de todo e a variável local_baixa é garantida para permanecer não-inicializada. Mas como a interrupção bool-variável permanece falsa (linha 3), em virtude da condição na linha 13, a variável não-inicializada local_low nunca (nunca deve) ser utilizada nos cálculos. Em particular, uma expressão com a variável local_low da linha 15 não deve ser avaliada [a menos, claro, que a declaração if funcione exactamente como indicado na ajuda:) ].
Por outras palavras, se for garantido que a variável local_low não será inicializada, também é garantido que não será (não deverá) utilizada nos cálculos.
Aqui está um pedaço de código. A função imprime o equilíbrio, equidade e valores de spread em cada tic. Mas a informação é mostrada por alguma razão, não para o tick anterior. Por favor, ajude-me a compreender porquê? Em MT4 código semelhante muda valores a cada novo tick, e em MT5 com um novo tick a informação é mostrada para tick anterior.
Tem"possível utilização de variável não-inicializada 'local_low'".
O que é que diz se
Releia as minhas respostas do ponto de vista de um gestor de uma empresa de software que trouxe muitos projectos de software para o mercado.
Caso contrário, permanecendo ao nível de "qualquer programador", não compreenderá qual é o erro.
:) Uma vez que nunca serei o chefe de uma empresa de software, permanecerei para sempre ao nível de "qualquer programador" (ou seja, um programador amador, no meu entender).
...E como o programador amador nunca obtém uma descrição lógica do erro, conclui que ou simplesmente não há erro no seu pedaço de código ou o erro é tão complicado que ninguém o pode descrever na linguagem da lógica. Neste momento, podemos considerar que ambos os lados se entendem, a questão está terminada.
Se a variável for inicializada com qualquer coisa, o aviso desaparece. Mas, como pode ver por si próprio, a inicialização da variável local_low é redundante neste pedaço de código. Assim, o aviso não interfere em nada com a vida.
... O compilador terá de ser tão"infalível" quanto possível.
... não escrever se (a===verdadeiro) ...
Mas devido ao uso de interrupção bool-variável na linha 9 logo após a inicialização da variável local_low na linha 8, verifica-se que na linha 15 a variável local_low terá a garantia de ser inicializada. Assim, neste ponto, o aviso "possível utilização da variável não inicializada 'local_low'" não significa "garantida" mas apenas a possível presença de um ramo de passagem em que a variável não é inicializada.
Se enviarmos um pedido para modificar uma posição com as mesmas paragens, receberemos um erro. Mas se enviar um pedido para modificar uma ordem pendente com os mesmos parâmetros, o pedido será executado. É assim que o planeámos e não precisamos de verificar os parâmetros para alterações?
Porquê entupir o servidor com pedidos desnecessários, por exemplo, em caso de erro no Expert Advisor ou lógica incorrecta do seu funcionamento?
No seu exemplo, se Ac-k=0 , então a declaração para declaração não será executada de todo e o local_baixo é garantido não-inicializado. Ou será errado?
É exactamente isso. Se Ac-k<=1, o para operador não deve ser executado de todo e a variável local_baixa é garantida para permanecer não-inicializada. Mas como a interrupção bool-variável permanece falsa (linha 3), em virtude da condição na linha 13, a variável não-inicializada local_low nunca (nunca deve) ser utilizada nos cálculos. Em particular, uma expressão com a variável local_low da linha 15 não deve ser avaliada [a menos, claro, que a declaração if funcione exactamente como indicado na ajuda:) ].
Por outras palavras, se for garantido que a variável local_low não será inicializada, também é garantido que não será (não deverá) utilizada nos cálculos.