[fpc-pascal] Re: Is this if /else syntax wrong?

Guillermo Martínez Jiménez gmartinez at burdjia.com
Thu Jul 1 10:38:43 CEST 2010


> procedure TfrmHometel.SetSplitterSizes;
> var
>  i: integer;
> begin
>  for i:=3D 0 to ComponentCount - 1 do
>  begin
>   if Components[i] is TSplitter then
>   begin
>     with TSplitter(Components[i]) do
>     begin
>      if Cursor =3D crHSplit then
>        Width :=3D 7
>      else if Cursor =3D crVSplit then
>        Height :=3D 7;
>      ; // <-- removing this semicolon results in a syntax error. Is it
> syntax error some kind of extra strict compiler check.
>      Color :=3D clBlue;
>     end;
>   end;
>  end;
> end;

Compare with next:

      if Cursor =3D crHSplit then
        Width :=3D 7
      else
        if Cursor =3D crVSplit then
          Height :=3D 7; // <-- This semicolon is for the "if".
      ; // <-- This semicolon is for the "else".

Is like this:

IF ... THEN
BEGIN
  ...
END
ELSE BEGIN
  IF ... THEN
  BEGIN
    ...
  END;  // <-- This END is for the "IF".
END;  // <-- This END is for the "ELSE".

I recommend to use "BEGIN ... END" blocks in nested "IF" always to
prevent this kind of mistakes.

Regards,
Guillermo "Ñuño" Martínez.



More information about the fpc-pascal mailing list