IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Работа со множествами, FPC, Будьте аккуратнее :)
сообщение
Сообщение #1


Гость






Привет всем.

Сегодня наткнулся на непонятное (с точки зрения Паскаля) поведение FPC. Вот такой простейший код, совершенно корректно отрабатывающий в Турбо Паскале:

type
tset = set of 'a' .. 'z';
const
myset: tset = ['a' .. 'z'];
s: string = 'the test';
count: integer = 0;
var
i: integer;

begin
for i := 1 to length(s) do
begin
if s[ i ] in myset then inc(count);
end;
writeln(count);
end.

Попробуйте без его компиляции и запуска определить, что будет выведено на печать. А потом запустите на выполнение... smile.gif

Так что осторожнее с множествами...
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Не элемент - выяснение невозможно.
, и надо выбрасывать критическую ошибку, да? В топку такое поведение. У меня не строка может состоять из символов 'a'..'z', а посторонняя переменная. И если символ из строки в ней не присутствует или не может присутствовать - то In должен вернуть False.

Заметь, подобное поведение было как минимум до версии 2.0.0 (на двойке не помню, на 1.0.10 проверил только что - работает), обратная совместимость где? smile.gif

Да. И еще одно - что мне совершенно непонятно. Откомпилируем программу в Options -> Mode = Release, все прекрасно работает и в 2.4.0. То есть, все-таки баг в отладочных режимах.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(volvo @ 6.11.2010 2:59) *
И еще одно - что мне совершенно непонятно. Откомпилируем программу в Options -> Mode = Release, все прекрасно работает и в 2.4.0. То есть, все-таки баг в отладочных режимах.
Гм. А разве в моде Release включен Range Checking?..

Володь, я в целом согласен, что фича ненужная и бесполезная. Я не могу привести примера для себя, где оно бы помогло. Но все же логику тут отрицать пока не могу.
Я еще подумаю над этим..


Добавлено через 4 мин.
Цитата(volvo @ 6.11.2010 2:59) *
, и надо выбрасывать критическую ошибку, да?
Это обычный RangeCheck.. Выключи/включи его для этого куска кода - и проблема решена..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
volvo   Работа со множествами, FPC   6.11.2010 2:51
TarasBer   Должно быть 7 же, а в ФПЦ чё за прикол происходит?   6.11.2010 3:02
Archon   FreePascal 2.4.0. Предсказуемо, 7.   6.11.2010 3:17
volvo   Ну вот, и я думал, что 7... Однако, на самом дел…   6.11.2010 3:20
Lapp   Вот я и думаю, это ж баг? Так быть не должно - не …   6.11.2010 6:45
volvo   , и надо выбрасывать критическую ошибку, да? В топ…   6.11.2010 6:59
Lapp   И еще одно - что мне совершенно непонятно. Откомпи…   6.11.2010 7:04
Lapp   Я еще подумаю над этим..Я подумал, как и обещал. …   6.11.2010 12:26
Archon   Delphi не ругается ни при выключенном RangeCheck, …   6.11.2010 14:53
Lapp   При операциях с числами аргументы приводятся к бол…   7.11.2010 9:31
Client   ошибка всегда, если Range Checking включен, во все…   6.11.2010 15:25
volvo   Я не отмалчиваюсь, я просто сейчас сидел и разбира…   7.11.2010 18:20
Lapp   Если так все-таки было задумано, то чего бы не сде…   8.11.2010 8:12
volvo   Нет еще... Сегодня вечером запощу.   8.11.2010 17:28


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 6:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name