GARANTIR DESCONTO

Fórum Aviso ao compilar ... #353743

15/02/2008

0

Olá amigos,

Alguém sabe por que o compilador gera este aviso na linha indicada e se há algum problema com o código abaixo ?

[Hint] unDM.pas(54): Value assigned to ´C´ never used

Parte do código:

var
C: TComponent;
begin
C := oForm.FindComponent(Item);
try
if (C <> nil) then
begin
...
end;
finally
C := nil; // Nessa linha aparece o [Hint]
end;


Obrigado.
Francisco.


Francisco.riva1

Francisco.riva1

Responder

Posts

15/02/2008

Marcosrocha

O compilador acha que sua inicialização pode nunca ser utilizada, ou seja, C foi criada mas talvez não será usada.
Tente mover o C := oForm.FindComponent para dentro do try. É só isso... Dependendo da posição da inicialização da variável e do seu código, o Delphi estima que o valor associado a ela pode não ser usado, o que causaria desperdício de memória.


Responder

Gostei + 0

15/02/2008

Massuda

O compilador está avisando você que o valor nil que está sendo atribuído à variável C nunca é utilizado. Isso pode ser um erro de sua parte ou não.

Se estiver compilando com otimização de código ligada, com certeza essa linha será eliminada do código final.


Responder

Gostei + 0

15/02/2008

Francisco.riva1

Olá Marcos, Massuda

Já tentei várias coisas (com relação a posição de criar a variável C e atribuir Nil a ela) nada funcionou e parece estar tudo certo!

Vocês conseguem ver alguma coisa errada nesta rotina ?

Vejam a rotina inteira:

var
C: TComponent;
begin
C := oForm.FindComponent(Item);
try
if (C <> nil) then
begin
// Configura itens do menu
if C is TMenuItem then
begin
if Permissao = ´S´ then
TMenuItem(C).Enabled := True
else
TMenuItem(C).Enabled := False;
end
else
// Configura outros objetos
begin
if Permissao = ´S´ then
TMostraProp(C).Enabled := True
else
TMostraProp(C).Enabled := False;
end;
end;
finally
C := nil;
end;


Responder

Gostei + 0

15/02/2008

Massuda

Não tem nada de errado. O compilador gera dois tipos de mensagens: erros e avisos. Erros são situações que impedem a geração de código. Avisos são situações que o compilador considera estranhas.

No seu caso, o aviso é gerado porque você atribui um valor à variável C mas depois disso não utiliza mais essa variável (que é o seu caso) ou atribui um novo valor à variável. O compilador avisa pois isso pode ser um erro (você esqueceu de continuar o código ou a atribuição está no lugar errado).

Para ´resolver´ o aviso, basta retirar a linha que atribui nil à C, já que ela é desnecessária.


Responder

Gostei + 0

15/02/2008

Rodc

FindComponent retorna um ponteiro para o componete. C é um ponteiro para o componente que FindComponente retornou. Você não precisa fazer ´C := nil´ porque ele é só um ponteiro e assim que sair da função vai ser retirado da memória, assim como você cria uma variável String e não precisa atribuir nil à ela antes de encerrar o código.
Agora, se você estivesse usando C := TComponent.Create(); aí sim você teria de usar FreeAndNil() para remover o componente que você criou.


Responder

Gostei + 0

15/02/2008

Francisco.riva1

Mais do que explicado !

Obrigado a todos pela atenção.
Abraços,
Francisco.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar