Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Контоль диапазонов при компиляции   Найти похожие ветки 

 
leonidus   (2005-03-06 12:37) [0]

Подскажите пожалуйста где в IDE включается контроль диапазонов, т.е. что бы на этапе компиляции компилятор сам находит ошибки типа:

var
a:array[1..10] of string;
begin
i:=1 to 1000 do
a[i]:="";


 
MU ©   (2005-03-06 12:45) [1]

На этапе выполнения Project Options->Compiler->Range Checking
На этапе компиляции - в голове, я думаю


 
Юрий Зотов ©   (2005-03-06 12:46) [2]

Project | Options, вкладка Compiler, птичка Range checking.


 
leonidus   (2005-03-06 12:48) [3]

спасибо большое


 
Юрий Зотов ©   (2005-03-06 12:51) [4]

Сорри, невнимательно прочитал вопрос. Отлов подобных ошибок на этапе компиляции можно сделать так:

type
 TRange = 1..10;

var
 i: TRange;
 a: array[TRange] of string;


 
leonidus   (2005-03-06 13:27) [5]

Че-то не прокатывает, конструкция

var
a:array[1..10] of string;
i:integer;
begin
for i:=1 to 100 do
 a[i]:="";

совершенно нормально компилируется...


 
MU ©   (2005-03-06 13:33) [6]

или [4] (тогда компилятор отловит)

или использовать такой код
 for i := Low(a) to High(a) do
    a[i] := "0";


 
Anatoly Podgoretsky ©   (2005-03-06 14:02) [7]

Поскольку нет явного (литерального) выхода за границы, то компилятору нечего тут делать - это работа для рантайм. И не надо на это расчитывать, надо писать правильно, пример такого грамотного написания в сообщении [6]
А пример грамотноного описания массива в [4]


 
Anatoly Podgoretsky ©   (2005-03-06 14:06) [8]

А добавив в ътому еще и значимые имена избежим еще и много ошибок. Ну что такое [1..10] ведь это что то значит, значит создать значимый тип. Например для месяцев

type
  TMonthRange = 1..12;

var
  i: TMonthRange;
  a: array[TMonthRange] of string;
begin
  for i := Low(a) to High(a) do
   a[i] := "0";
end;


А если вспомнить еще что есть перечисленные типы, то будет совсем хорошо. Возможно это 1..10 надо было перечислить.


 
leonidus   (2005-03-06 18:15) [9]

хорошо, понял, всем большое спасибо.



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
9-1102883870
Zak3D[@Tm]
2004-12-12 23:37
2005.03.20
Космические объекты...


3-1108621977
Evyshka
2005-02-17 09:32
2005.03.20
Нарастающий итог


14-1109784182
Гарри Поттер
2005-03-02 20:23
2005.03.20
Газпром + Роснефть = ?


1-1109772312
mrAld
2005-03-02 17:05
2005.03.20
Доступ к коллекции через IEnumerator


3-1108708207
Ольга
2005-02-18 09:30
2005.03.20
UPDATE с углубленным сравнением