線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1029
推到 Plurk!
推到 Facebook!

DELPHI是不是管的太多了?

尚未結案
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-23 11:56:52 IP:218.5.xxx.xxx 未訂閱
我在程序中有这么一句: p := i; i是FOR循环的变量,p是一个integer变量,p保存从FOR循环跳出时i的值. 可是p := i;这一句在编译时总是被DELPHI忽略,执行时总执行不到,造成后面程序执行出错.
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-23 12:33:54 IP:60.248.xxx.xxx 未訂閱
程式碼編譯後在執行時會被忽略, 這是編譯器最佳化的功能. 但是如果你的變數 p 在 for 迴圈之後有用到的話, 這 p := i; 就不會被忽略掉. 最好貼出較為完整的程式碼, 才能探究真正的原因. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
fangwy
中階會員


發表:99
回覆:139
積分:62
註冊:2003-09-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-23 13:27:59 IP:218.5.xxx.xxx 未訂閱
p在后面的代码做为数组的下标,一定有用. 我试了很多方法,最后发现,我将p := i;改成p := i 1 - 1;就行了,真是怪.不知是不是BUG. 如果哪位大大有遇到与我一样的现象,谈谈你的看法.
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-23 16:13:26 IP:203.69.xxx.xxx 未訂閱
var
  Form1: TForm1;
  p: Integer;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
var
  k,i: Integer;
begin
  k := 0;
  for i:=0 to 100 do
    k:=k i;
  p:=i;
end;    procedure TForm1.Button2Click(Sender: TObject);
begin
  Caption := IntToStr(p);
end;
這樣不會被最佳化掉,
procedure TForm1.Button1Click(Sender: TObject);
var
  k,i,p: Integer; // 這樣就會被最佳化掉
begin
  k := 0;
  for i:=0 to 100 do
    k:=k i;
  p:=i;
end;
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-23 18:55:12 IP:61.59.xxx.xxx 未訂閱
引言: p在后面的代码做为数组的下标,一定有用. 我试了很多方法,最后发现,我将p := i;改成p := i 1 - 1;就行了,真是怪.不知是不是BUG. 如果哪位大大有遇到与我一样的现象,谈谈你的看法.
是否一定有用, 沒有程式碼沒有真相. 當 p := i 之後的程式碼都沒有用到 p 變數, 就有機會被忽略. 希望都不要被最佳化, 可以調整專案的設定, 強制全面編譯. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-23 18:59:10 IP:61.59.xxx.xxx 未訂閱
引言:
var
  Form1: TForm1;
  p: Integer;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
var
  k,i: Integer;
begin
  k := 0;
  for i:=0 to 100 do
    k:=k i;
  p:=i;
end;    procedure TForm1.Button2Click(Sender: TObject);
begin
  Caption := IntToStr(p);
end;
這樣不會被最佳化掉,
procedure TForm1.Button1Click(Sender: TObject);
var
  k,i,p: Integer; // 這樣就會被最佳化掉
begin
  k := 0;
  for i:=0 to 100 do
    k:=k i;
  p:=i;
end;
不好意思, 您這樣的程式. 可以表達變數的生命週期與有效範圍. 並不太適合說明編譯最佳化的現象. 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-23 21:29:11 IP:61.219.xxx.xxx 未訂閱
不好意思, 沒說清楚, 我的意思就是 是不是宣告錯誤 才造成被最佳化掉....
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-23 21:44:52 IP:61.59.xxx.xxx 未訂閱
幾篇有談到編譯最佳化的文章. http://delphi.ktop.com.tw/topic.php?topic_id=48303 http://delphi.ktop.com.tw/topic.php?topic_id=66176 http://delphi.ktop.com.tw/topic.php?topic_id=48239 雪龍 http://bestlong.no-ip.com/ 學海無涯覺無盡,勤做筆記防失憶 發表人 - bestlong 於 2005/08/23 21:45:26
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-24 11:36:19 IP:61.231.xxx.xxx 未訂閱
這個是變數生命週期的問題吧。 程式一開始就有宣告 var   Form1: TForm1; p: Integer; //假設叫綠色p 所以在 procedure TForm1.Button1Click(Sender: TObject); var k,i: Integer; begin k := 0; for i:=0 to 100 do k:=k i; p:=i; //這個p是綠色的p end; procedure TForm1.Button1Click(Sender: TObject); var k,i ,p: Integer; // 這樣就會被最佳化掉 begin k := 0; for i:=0 to 100 do k:=k i; p:=i; //這個p是程序裡的p,跟p是無關的,而且由於後面都沒有用到,當然會被最佳化掉。 end; procedure TForm1.Button2Click(Sender: TObject); begin Caption := IntToStr(p); //不論是用上面那一種,這個p一定是綠色的p end; ..-----------βλμε------------..
◎Oo月夜 光明 藍更愁oO◎
藍調月光城v4:http://inping.myweb.hinet.net/ (暫時使用中..) 明日報(藍調.月光):http://mypaper2.ttimes.com.tw/user/a6475 發表人 - a6475 於 2005/08/24 11:37:41 發表人 - a6475 於 2005/08/24 11:40:32
------
月夜 光明 藍更愁
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-08-24 11:55:32 IP:203.69.xxx.xxx 未訂閱
謝謝 a6475 大大的詳盡解說.... 我只是想確定一下 fangwy 兄的最佳化問題是不是 因為宣告造成的...
系統時間:2024-06-29 13:54:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!