[Delphi 7] необычное поведение val
почему не используешь более правильные аналоги StrTo...?
ЗЫ. кстати да - в мане так и написано - что это "аналог" функции Read. как scanf и sscanf
![](/images/graemlins/wink.gif)
и этот Read - это не функция в обычном понимании.
почему не используешь более правильные аналоги StrTo...?Чем они более правильны? В данном случае мне удобнее проанализировать значение параметра-переменной чем писать обработчик исключения (для варианта StrTo..)
Считаю, что это всё-же существенный подводный камень. Я данную функцию представлял как группу одноимённых функций, каждая из которых читает данные одного типа но, судя по всему, это не так реализовано.
Чем они более правильны?Уже сказали - тем, что они - нормальные функции, а не оставленные только ради обратной совместимости.
Вариант StrTo..Def чем не выход из исключений?
StrTo .... плохи тем, что SysUtils, который для маленьких проектов, использующих лишь винапи, включать не желательно.
Оставить комментарий
Andbar
рассматриваем val как обычную процедуру... Тогда при вызове в неё должны передаться: S, вычисленный указатель на V, вычисленный указатель на Code.В таком случае, следующая строчка: должна работать так: в функцию передаётся строка, указатель на n-нный элемент массива, а затем указатель на n, в итоге somearray[old_n] заполняется значением, записанным в строке, а в n записывается 0, если всё ок.
На самом деле, значение в строке записывается в нулевой элемент массива, т.е. вычисление указателя, по которому фукнция должна записать величину, записанную в строке, во всяком случае, после того, как произойдет проверка на валидность данных в строке. Если посмотреть асм-код, можно увидеть несколько вызовов различных функций (имена которых не указываются, хотя это мб. связано с тем, что я юзаю пакеты т.е. это скорее некая языковая конструкцие, нежели процедура в обычном понимании.
В общем, это некий подводный камень, имхо.