🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.pascal
3 messages
3 total messages Started by webmajsterek@poc Tue, 12 Oct 2010 10:02
Wadliwy kod wynikowy
#89732
Author: webmajsterek@poc
Date: Tue, 12 Oct 2010 10:02
67 lines
1540 bytes
taki przykladowy program -- pokazuje �e fpc w z�ej kolejnosci wywoluje funkcje
zawarte w wywo�aniu procedury .

program error;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

{$R *.res}

const tab:array[0..9]of byte =(0,1,2,3,4,5,6,7,8,9);
var Count:Integer;

Function ReturnByte:Byte;
begin
   If Count>9 then Count:=0;
   Result:=Tab[Count];
   Count:=Count+1;
end;

procedure WriteByte(S:String;a,b,c,d:Byte);
begin

   WriteLn(S,a,' ',b,' ',c,' ',d);
end;

var a,b:Byte;
begin
  Count:=0;
  WriteLn  (' Orginal     ',tab[0],' ',Tab[1],' ',Tab[2],' ',Tab[3]);
  WriteByte(' Bad Result  ', ReturnByte,ReturnByte,ReturnByte,ReturnByte);

  WriteLn  (' Orginal     ',tab[4],' ',Tab[5],' ',Tab[6],' ',Tab[7]);
  a:= ReturnByte;
  WriteByte(' Bad Result  ', a,ReturnByte,ReturnByte,ReturnByte);

  WriteLn  (' Orginal     ',tab[8],' ',Tab[9],' ',Tab[0],' ',Tab[1]);
  a:= ReturnByte;
  b:= ReturnByte;
  WriteByte(' Good Result ', a,b,ReturnByte,ReturnByte);

  Readln;
end.


na
http://wiki.freepascal.org/Code_Conversion_Guide#Order_of_parameter_evaluation

pisza ze
"Delphi gwarantuje, �e wszystkie parametry s� obliczane od lewej do prawej. FPC
nie zawiera takich gwarancji, a mo�e wywo�a� parametry w dowolnej kolejno�ci  w
celu wytworzenia optymalnego kodu."

I tu problem bo w 99.99 % przypadk�w  wywo�a� kolejno�� ma znaczenie .



--
Wys�ano z serwisu OnetNiusy: http://niusy.onet.pl

Re: Wadliwy kod wynikowy
#89734
Author: =?iso-8859-2?Q?
Date: Tue, 12 Oct 2010 11:42
29 lines
1085 bytes
On Tue, 12 Oct 2010 10:02:12 +0200, webmajsterek@poczta.onet.pl wrote:

> taki przykladowy program -- pokazuje �e fpc w z�ej kolejnosci wywoluje funkcje
> zawarte w wywo�aniu procedury .

Nie w "z�ej" tylko w "innej ni� Dephi", co jest zreszt� udokumentowane
w linku kt�ry poda�e�:

> na
> http://wiki.freepascal.org/Code_Conversion_Guide#Order_of_parameter_evaluation
>
> pisza ze
> "Delphi gwarantuje, �e wszystkie parametry s� obliczane od lewej do prawej. FPC
> nie zawiera takich gwarancji, a mo�e wywo�a� parametry w dowolnej kolejno�ci  w
> celu wytworzenia optymalnego kodu."

...i nawet jest przedstawiony pow�d dla kt�rego kompilator mo�e chcie�
reorder'n�� wywo�ania.

> I tu problem bo w 99.99 % przypadk�w  wywo�a� kolejno�� ma znaczenie .

Nie, wbrew przeciwnie, w 99.(9)% przypadk�w poleganie na kolejno�ci
wywo�a� ,podobnie jak w podanym przyk�adzie, to poleganie na
side-effect wywo�ania, a to jest bezwzgl�dnie z�a praktyka.

--
Pozdrawiam,
�ukasz 'Maly' Ostrowski.      http://l3v.pl/

Re: Wadliwy kod wynikowy
#89737
Author: "Wiktor S."
Date: Tue, 12 Oct 2010 12:54
15 lines
453 bytes
> taki przykladowy program -- pokazuje �e fpc w z�ej kolejnosci
> wywoluje funkcje zawarte w wywo�aniu procedury .

Jak to z�ej? Dokumentacja m�wi, �e kolejno�� jest niezdefiniowana. Wi�c
ka�da kombinacja jest r�wnie prawid�owa.

> I tu problem bo w 99.99 % przypadk�w  wywo�a� kolejno�� ma znaczenie .

U�ywaj�c FPC jeste� zmuszony tak pisa� kod, aby to znaczenie mia�o dok�adnie
w 0,00%.

--
Azarien


Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads