Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error en el compilador de Delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=63052)

Faust 27-01-2009 21:01:07

Error en el compilador de Delphi 7
 
Saludos de nuevo camaradas...

Pues sucede que hoy haciendo una pequeña aplicación para imprimir cheques noté algo que podría ser un error... uso Delphi 7 Ent sobre winXP y el siguiente código no me da error:

Código Delphi [-]
   IniFile.ReadSections(lstCheques.Items,  );

La coma indica que hay un segundo parámetro pero...

Quizás sea inteligente el analizador sintáctico y deduzca "se espera un solo parámetro, una coma y un espacio vacío extra no son problema"... con este nivel de inteligencia esto tampoco daría error:

Código Delphi [-]
   IniFile.ReadSections(lstCheques.Items,  , );

Pero si muestra el error...

¿entonces?

Al González 27-01-2009 22:42:12

:) ¿Cuál es el mensaje de error? ¿En qué momento preciso aparece? (<-- estas dos preguntas nunca deberían ser necesarias :p)

Con esta prueba:
Código Delphi [-]
  IntToStr (5, );
, me aparece el error "Too many actual parameters" al tratar de compilar, colocándose el cursor entre el paréntesis de cierre y el punto y coma (Delphi 7).

Saludos.

Al. :)

Faust 27-01-2009 23:29:37

Este no me muestra error!!!

Código Delphi [-]
  IniFile.ReadSections(lstCheques.Items, );

Código Delphi [-]
  IniFile.ReadSections(lstCheques.Items, , );

En el último el error es igual que el tuyo "Too many actual parameters"

roman 27-01-2009 23:42:03

¡Vaya! Nunca había notado esto. También

Código Delphi [-]
ShowMessage('Hola mundo',);

compila sin problemas :eek:

// Saludos

roman 27-01-2009 23:50:04

Curioso...

Como dice Al, esto no compila:

Código Delphi [-]
IntToStr(84,);

Sin embargo esto sí :eek:

Código Delphi [-]
function IntToStr(N: Integer): String;
begin
  Result := SysUtils.IntToStr(N);
end;

IntToStr(84,);

// Saludos

Al González 27-01-2009 23:59:23

¡Hey!

Creo saber por dónde van los tiros:

Código Delphi [-]
Uses
  IniFiles;

Procedure Proc1 (L :TStrings);
Begin
End;

Procedure Proc2 (S :String);
Begin
End;

Procedure Proc3 (I :Integer);
Begin
End;

Procedure Proc4 (S :String); Overload;
Begin
End;

procedure TForm1.Button1Click(Sender: TObject);
Var
  Ini :TIniFile;
begin
  // ¡La compilación NO falla con estas seis llamadas!:

  Ini.ReadSections (Memo1.Lines, );

  Proc1 (Memo1.Lines, );

  With Memo1 Do
    Proc1 (Lines, );

  Proc2 ('001', );

  StrToInt ('001', );

  Proc3 (5, );


  // La compilación sí falla con estas dos llamadas

  Proc4 ('001', );  // Proc4 es "Overload"

  IntToStr (5, );  // IntToStr es "Overload"
end;

Tal parece que el desliz del compilador sólo ocurre con las rutinas no sobrecargadas. Con las que llevan la declaración Overload sí se fija.

¡Sorprendente descubrimiento! :eek:

Al González 28-01-2009 00:08:01

Acabo de probarlo en Delphi 2007 también: ahí el compilador presenta el mismo extraño comportamiento.

Encontraste un defecto (bug) interesante, Faust. Si esto está desde Delphi 7, ¿acaso no habrá sido reportado ya? Habrá que echar un vistazo en QualityCentral...

poyo 28-01-2009 01:20:48

Eso en D2009 + Upd.1 no compila. Tira error "too many..." como debería ser.
por las dudas... se fijó alguien qué código genera? si genera lo mismo que cuando la función está siendo llamada correctamente?
yo supongo que sí... pero...

Faust 28-01-2009 05:37:12

Vaya... hoy si hice un descubrimiento... :rolleyes:

Ojalá hubiera sido un cometa, para ponerle mi nombre :D :D :D

Y aprovechando mi fugaz popularidad... por favor échenme la mano con este problemita de impresión


La franja horaria es GMT +2. Ahora son las 06:12:33.

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