Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Delphi no compila algunas líneas y cínicamente me lo informa (https://www.clubdelphi.com/foros/showthread.php?t=68498)

Faust 17-06-2010 01:08:30

Delphi no compila algunas líneas y cínicamente me lo informa
 
Así es: llevo rato tratando de ver el porque no funciona mi programa, he depurado y checado algunas de las variables, pero no me había dado cuenta que la variable con la que recorro un for dentro de otro for para procesar un array de strings no está siendo compílada y cínicamente delphi me ha dicho:

Cita:

(Hint) Coinc.pas(203): Value assigned to 'j' never used
Entiendo que dice que como esta variable no sirve de nada pues no la compila, y cuando compilo no aparece el puntito azul a la derecha de la línea de mi código y como no se compila aparece un tonto valor de 1308584 en esa variable y al usarla pues nunca ejecuta el codigo dentro de mi for

Código Delphi [-]
function Coincidences(Str1, Str2: string): TArrStr;
var
  LStr1, LStr2, i, j, Last: Integer;
  TmpArrStr: TArrStr;
begin
  ... // Aquí hay código donde no uso mi variable j
  j:= 1;  // Esta línea la pongo  de prueba pero es donde me salta el Hint al compilar y no se compila esta línea y al debuggear siempre tiene el valor 1308584
  for i:= 1 to Length(TmpArrStr) do
  begin
    SetLength(Result, Length(Result) + 1);
    Last:= Length(Result) - 1;
    for j:= 1 to Length(Result[i]) - 1 do  // Aquí a j no se le asigna 1 sino que se le queda el 1308584 y como resultado nunca ejecuta el código de abajo
      Result[Last]:= Result[Last] + TmpArrStr[i - 1, j]
  end
end;

¿cómo le hago al compilador para que me compile esta línea? para que entienda que si sirve esta variable, no creo estar haciendo nada mal, en el código anterior he puesto las líneas donde hago uso de j para ver si alguien me da una pista de qué es lo que está pasando.

Ah por cierto, uso Delphi 7 Enterprise y Win XP sp3

Saludos.

Ñuño Martínez 17-06-2010 01:31:17

Creo que el problema podría venir de cómo está definido TArrStr. Es decir, ¿no sería posible que "Length(Result[i])" sea 1 ó 0 en el momento de compilar? En tal caso el bucle nunca se ejecutaría y el compilador deduciría que "j" no se utiliza.

Faust 17-06-2010 01:38:04

Cita:

Empezado por Ñuño Martínez (Mensaje 367505)
Creo que el problema podría venir de cómo está definido TArrStr. Es decir, ¿no sería posible que "Length(Result[i])" sea 1 ó 0 en el momento de compilar? En tal caso el bucle nunca se ejecutaría y el compilador deduciría que "j" no se utiliza.

Ya lo resolví, te comento en efecto el "Length(Result[i])" si era cero pues iba "Length(TmpArrStr[i]), TmpArrStr es un array of string, y mi otro error fue que la línea:

Código Delphi [-]
      Result[Last]:= Result[Last] + TmpArrStr[i - 1, j]

es:
Código Delphi [-]
       Result[Last]:= Result[Last] + TmpArrStr[i - 1][j]

Y ya con eso, de todas formas gracias amigo Ñuño. :)

Ñuño Martínez 17-06-2010 09:12:23

Un placer, ya sabes. :)

Neftali [Germán.Estévez] 17-06-2010 11:16:57

Seguramente si en las opciones del compilador desactivas el optimizador dejen de pasarte estas cosas raras...;)

Faust 17-06-2010 16:40:43

Cita:

Empezado por Neftali (Mensaje 367525)
Seguramente si en las opciones del compilador desactivas el optimizador dejen de pasarte estas cosas raras...;)

Ya lo había desactivado y seguía haciéndome lo mismo de hecho me has recordado que lo vuelva a activar... muchas gracias :)

FENIXadr 17-06-2010 18:35:33

Delphi no Compila
 
Este problema me ha sucedido algunas veces, tengo D7 tambien y siempre lo he solucionado "arreglando" mi código.. o sea, el compilador de D7 está bastante depurado como para que haga "cosas raras" siempre que algo de esto sucede es MUY aconsejable revisar el código minuciosamente porque el error es más nuestro que del compilador. Saludos.

(MAJ) 21-06-2010 21:55:47

hola Faust.
segun entiendo yo, con ese aviso, te esta diciendo que vos declaraste la variable "j" pero no estas haciendo ninguna operacion o algo asi, no significa que el compilador no la esta usando, sino que el compilador la esta interpretando como inutilizada,

Cita:

Coinc.pas(203): Value assigned to 'j' never used
porque la traduccion correcta del hint seria :cool:

Cita:

Coinc.pas(203): valor asignado a "j" nunca usado
Te esta diciendo que el valor que le asignaste a la variable j no esta siendo utilizado en ninguna parte del codigo, aunque vos la estes usando en el bucle for... hay que comprender que ese tipo de advertencias y demas, estan basadas en parametros, por lo que son propensas a errores.:confused:

espero estar en lo correcto:p, y que te alla servido la información:rolleyes:

saludos


La franja horaria es GMT +2. Ahora son las 03:56:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi