[Delphi 7] необычное поведение val

Andbar

 
Delphi syntax:
procedure Val(S; var V; var Code: Integer);
  
рассматриваем val как обычную процедуру... Тогда при вызове в неё должны передаться: S, вычисленный указатель на V, вычисленный указатель на Code.
В таком случае, следующая строчка:
val(somestring, somearray[n], n);  
должна работать так: в функцию передаётся строка, указатель на n-нный элемент массива, а затем указатель на n, в итоге somearray[old_n] заполняется значением, записанным в строке, а в n записывается 0, если всё ок.
На самом деле, значение в строке записывается в нулевой элемент массива, т.е. вычисление указателя, по которому фукнция должна записать величину, записанную в строке, во всяком случае, после того, как произойдет проверка на валидность данных в строке. Если посмотреть асм-код, можно увидеть несколько вызовов различных функций (имена которых не указываются, хотя это мб. связано с тем, что я юзаю пакеты т.е. это скорее некая языковая конструкцие, нежели процедура в обычном понимании.
В общем, это некий подводный камень, имхо.

yolki

эта "функция" оставлена для backward-compatibilty с TurboPascal.
почему не используешь более правильные аналоги StrTo...?
ЗЫ. кстати да - в мане так и написано - что это "аналог" функции Read. как scanf и sscanf
и этот Read - это не функция в обычном понимании.

Andbar

почему не используешь более правильные аналоги StrTo...?
Чем они более правильны? В данном случае мне удобнее проанализировать значение параметра-переменной чем писать обработчик исключения (для варианта StrTo..)
Считаю, что это всё-же существенный подводный камень. Я данную функцию представлял как группу одноимённых функций, каждая из которых читает данные одного типа но, судя по всему, это не так реализовано.

kruzer25

Чем они более правильны?
Уже сказали - тем, что они - нормальные функции, а не оставленные только ради обратной совместимости.

yolki

Вариант StrTo..Def чем не выход из исключений?

Andbar

StrTo .... плохи тем, что SysUtils, который для маленьких проектов, использующих лишь винапи, включать не желательно.
Оставить комментарий
Имя или ник:
Комментарий: