![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
И всё-таки он бажный (про одно предупреждение)
Vovan#1 © (2006-09-25 00:07:00)То предупреждение, что выдавал компилятор, не давало мне покоя. Как так - удаляешь неиспользуемую переменную и предупреждение пропадает. Стал искать подобное в Интернете и нашёл, что таких сообщений много. Вот, например, легко воспроизводимое:
{$HINTS OFF}
function GetAsString: String;
var
v00, v01, v02, v03, v04, v05, v06, v07, v08, v09,
v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
v30, v31: Integer;
begin
Result := '' ;
end;
{$HINTS ON}
А у меня как раз возвращает динамический массив.
Вывод: Delphi - глючная программа.
sniknik (2006-09-25 11:20:00) [1]> Не пропадает. D7. Реально компилятор выдает ограниченное кол-во хинтов 'declared but never used'
вопрос не про 'declared but never used', которое в обшемто линейно и понятно, а про 'Return value of function ... might be undefined' при количестве "notused" переменных >= 32 (которое не совсем ожидаемо...).
p.s. видно не одного Германна манипуляции с хинтами "смутили" ;о))
TUser (2006-09-25 11:13:00) [2]> sniknik © (25.09.06 10:50) [28]
Не пропадает. D7. Реально компилятор выдает ограниченное кол-во хинтов 'declared but never used' - до 29й переменной. Судя по контрольным суммам экзешники генерируются разные, так что те только хинт не выдает, но и в код непонятно что пихает. Другое дело, что надо быть человеком со специфическими особенностями, чтобы 30 неиспользуемых переменных сотворить в одной функции.
sniknik (2006-09-25 10:50:00) [3]> угу. есть подозрение, что при превышении определённого лимита Delphi просто "вырубает" анализатор и выдаёт предупреждение --
> на всякий случай.
очень похоже.
использовать пару этих переменных (уменьшить список неиспользуемых) и предупреждение пропадает. (не говоря уже о устранении из явно ненужного var ...)
function GetAsString(st: string): String;
var
v00, v01, v02, v03, v04, v05, v06, v07, v08, v09,
v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
v30, v31: integer;
begin
v00:= 1;
v01:= 2;
result:= IntToStr(v00+v01);
end;
Германн (2006-09-25 01:46:00) [4]
> Ketmar © (25.09.06 01:14) [21]
>
> >[19] Германн(c) 25-Sep-2006, 01:10
> >А о каком собсс-но баге речь-то идёт?
> а ты код скомпиляй, и увидишь. %-)
>
Увидел. Смутило сначала то, что автор использовал директивы про хинты. Никак не относящиеся к вопросу. Увидел в Д6 и в BDS2006. А в Д4 - всё пучком! Я то в основном на ней живу, поэтому не сразу и сообразил.
Ketmar (2006-09-25 01:40:00) [5]>[24] Eraser(c) 25-Sep-2006, 01:21
>хм.. данный баг возникает при количестве
>переменных >= 32..
угу. есть подозрение, что при превышении определённого лимита Delphi просто "вырубает" анализатор и выдаёт предупреждение -- на всякий случай.
DrPass (2006-09-25 01:37:00) [6]
> данный баг возникает при количестве переменных >= 32..
Ну да - в "рабочей ситуации" он скорее всего и не встретится никогда
Eraser (2006-09-25 01:21:00) [7]хм.. данный баг возникает при количестве переменных >= 32..
Eraser (2006-09-25 01:17:00) [8]> [22] Ketmar © (25.09.06 01:15)
во! так бы сразу )
ушел спать.. )
Ketmar (2006-09-25 01:15:00) [9]>[20] Eraser(c) 25-Sep-2006, 01:14
во вполне однозначном коде компилятор жалуется на то, что "return value might be undefined". что, в принципе, похоже на баг, но не баг -- потому что "может быть не определено" и "не определено" -- вещи разные. %-)
Ketmar (2006-09-25 01:14:00) [10]>[19] Германн(c) 25-Sep-2006, 01:10
>А о каком собсс-но баге речь-то идёт?
а ты код скомпиляй, и увидишь. %-)
Eraser (2006-09-25 01:14:00) [11]> [18] Ketmar © (25.09.06 01:07)
наверное я уже что-то недопонял и мне пора спать..
какие у автора притензии к работе компилятора и выдаваемым им подсказкам и предупреждениям в этом конкретном примере [0]? так и не понял..
Германн (2006-09-25 01:10:00) [12]
> Vovan#1 (25.09.06 00:40) [11]
>
> >Что дальше то?
>
> Мне только признание существования этого бага и нужно.
>
А о каком собсс-но баге речь-то идёт?
Или "подсказки" с "предупреждениями" путаешь?
Ketmar (2006-09-25 01:07:00) [13]>[14] Плохиш(c) 25-Sep-2006, 00:42
>Я вообще рыдал....
>Таким кадрам даже метлу доверять нельзя.
нет, на самом деле он прав. действительно, ast travrerser (думаю, именно это используется в компиляторе, но точно не знаю, конечно %-) немного путается. каким-то образом он находит пути завершения процедуры, которых не существует. и действительно, если убрать блок "var", никаких варнингов уже не дают.
налетели мы тут не из-за этого, а из-за безапелляционности заявлений и кривости кода примера. я так понимаю, что если компилятор даёт хинт, то надо этот хинт внимательно почитать, и сделать так, чтобы его не было. %-)
DrPass (2006-09-25 00:53:00) [14]В компиляторе Delphi могут быть мелкие глюки. Которые еще надо поискать, и которые уж точно не вредят. Ну и что? Такие же есть в любом компиляторе, кроме разве что самых примитивных. Более противные баги можно найти в Delphi IDE. Но опять же, и что тут такого? Они есть в любом программном комплексе такой сложности. Та же Visual Studio 2005 иногда любиты вылетать, унося с собой в могилу весь несохраненный код (слава богу, за Delphi7 такого не водится)
Vovan#1 (2006-09-25 00:47:00) [15]>Никаких хинтов не увидел.
Не о них речь.
Eraser (2006-09-25 00:43:00) [16]> [0] Vovan#1 (25.09.06 00:07)
тестировал на BDS2006.
выдало только варнинг (а никто и не обещал, что варнинки выдаваться не будет!) "[Pascal Warning] Unit1.pas(34): W1035 Return value of function 'GetAsString' might be undefined".
Никаких хинтов не увидел.
Плохиш (2006-09-25 00:42:00) [17]
> Vovan#1 (25.09.06 00:07)
> То предупреждение, что выдавал компилятор, не давало мне
> покоя. Как так - удаляешь неиспользуемую переменную и предупреждение
> пропадает.
Я вообще рыдал....
Таким кадрам даже метлу доверять нельзя.
Vovan#1 (2006-09-25 00:41:00) [18]>Ketmar © (25.09.06 00:39) [10]
Вот это позиция. Порадовал и объяснил.
Плохиш (2006-09-25 00:41:00) [19]О и в этой ветки поколение пепси зажигает на ночь глядя....
Vovan#1 (2006-09-25 00:40:00) [20]>Что дальше то?
Мне только признание существования этого бага и нужно.