有下面一段**:
procedure tform1.button1click(sender: tobject);
vari: integer;
const item:array[0..18-1]of longword =
(1 , 3 ,5 ,7 ,9 , 11, 13 ,15, 17, 19 , 21 , 23, 25 , 27, 29, 31 , 33 ,35
);begin
for i := 0 to 17 do
begin
//g_cmem.getram(270);
//showmessage(inttostr(i));
//showmessage('a');
如果列印此變數i的值,單步跟蹤顯示的i值正確,
memo1.lines.add(inttostr(item[i])+'a');//而為什麼此處間接顯示以i表示的item陣列變數的值,跟蹤時發現i被編譯器優化為downto的形式,從18到1的形式,但列印出的結果卻正確,造成錯覺?
end;
end;
如果程式中沒有直接使用for變數的值,delphi編譯器會把for語句優化為downto的形式(如果程式中是使用for...to...),除錯程式時需要特別注意,當跟蹤for變數的值時,編譯器顯示的值會和程式中使用的語句表示式的值不一樣,但如果使用顯示的變數用watch監視是正確的,比如,當程式第一次執行for i:=0 to 17時,我們可以知道i的值為0,但跟蹤時編譯器顯示i的值為18,item[i]=4222796,為什麼會這樣呢? 因為item陣列只有18個元素,下標只到17,所以item[18]當然是乙個隨機的值了, 估計可能是因為編譯器把for語句優化為for i:=18 downto 的形式,我看到過一篇介紹在unix下,downto形式的for語句會比to形式的for語句要快,因為經編譯器編譯為匯程式設計序時,downto形式的for語句比to形式的for語句少一條彙編**,這樣就使得程式執行效率提高了,只是在跟蹤時可能顯示的是優化的值吧!delphi但如果我們把item[0]新增到watch中,顯示item[0]=1是正確的。
Delphi變數型別
delphi整形變數型別有以下幾種 type range format shortint 128.127 signed 8 bit smallint 32768.32767 signed 16 bit longint 2147483648.2147483647 signed 32 bit int64...
Delphi實現對IIS的操作
unit raiis inte ce uses sysutils,classes,comobj,windows type traiis class tcomponent private fondeletevirtualdir tnotifyevent foncreatevirtualdir tnot...
Delphi對ini檔案的操作
一 ini檔案的結構 注釋 小節名 關鍵字 值 ini檔案允許有多個小節,每個小節又允許有多個關鍵字,後面是該關鍵字的值。值的型別有三種 字串 整型數值和布林值。其中字串存貯在ini檔案中時沒有引號,布林真值用1表示,布林假值用0表示。注釋以分號 開頭。二 定義 1 在inte ce的uses節增加...