我試圖從wav soundfile中讀取數據。 soundfile中的數據以塊分佈。每個塊都以char的數組[0..3]開始。我無法找到「數據」塊。首先,我認爲這是在尋找功能(soFromBeginning soBeginning problem)或類型不匹配。經過長時間的搜索後,發現問題在我更改變量名稱時消失了。爲什麼我不能在Lazarus中使用「data」作爲變量名稱
這裏是儘可能簡化的問題的程序。
procedure readwavformattest1(filenamein: string);
var
f: TFileStream;
data: array[0..3] of char;
aantalread: longint;
begin
try
f := TFilestream.Create(filenamein, fmopenread);
aantalread := f.Read(data, sizeof(data));
if aantalread < sizeof(data) then
Exit;
finally
f.Free;
end;
end;
procedure readwavformattest2(filenamein: string);
var
f: TFileStream;
datal: array[0..3] of char;
aantalread: longint;
begin
try
f := TFilestream.Create(filenamein, fmopenread);
aantalread := f.Read(datal, sizeof(datal));
if aantalread < sizeof(datal) then
Exit;
finally
f.Free;
end;
end;
程序2正在工作並給出了用於數據「RIFF」的wav文件,程序1給出了數據「nil」。這兩個程序給了我很好的結果4 程序中唯一的區別是var名稱「數據」與「數據」 我不明白髮生了什麼問題。數據不是保留字,如果是,編譯器應該給出錯誤。如果數據是已經聲明的變量,則應使用局部變量。如果我省略了數據聲明,那麼數據對於編譯器來說是一個未知變量(所有調試檢查都打開) 不知何故,我不能使用「data」這個詞作爲變量名。
作爲問題26347提交給FPC bugtracker。它似乎是調試器中的問題。將鼠標懸停在變量上方會給出錯誤的答案,而實際上在變量中存儲的是正確的值。 – user3726575