Текущий архив: 2005.10.02;
Скачать: CL | DM;
Вниз
Не выполняются строки кода Найти похожие ветки
← →
Chaser © (2005-08-24 09:41) [0]Имеется код:
begin
z:=0;
k:=1;
p:=4;
if (i>1) and (i<6)
then
begin
x:=1;
z:=i-k;
for j:=1 to 11 do
begin
if (j>1) and (j<6)
then
begin
if (j-p)=i
then Str.Add("...")
else
begin
if (j-p)<0
then Str.Add("...");
if (j-p)>=1
then Str.Add("...");
dec(z);
end;
end;
...
end;
-> k:=k+2;
-> p:=p-1;
end;
end;
но вот эти две строки не выполняются:
k:=k+2;
p:=p-1;
Если вместо if (i>1) and (i<6)
поставить цикл, то они работают.
Почему так происходит и как это обойти?
← →
КаПиБаРа © (2005-08-24 09:43) [1]F7, F8 - пошаговое выполнение
← →
Chaser © (2005-08-24 09:52) [2]Значения k и z не меняются, эти строки просто игнорируются отладчиком и компилятором соотвественно.
← →
Chaser © (2005-08-24 09:53) [3]"k" и "p" то есть.
← →
Adder © (2005-08-24 10:03) [4]Отключи оптимизацию, а потом выполни
> КаПиБаРа © (24.08.05 09:43) [1]
← →
Anatoly Podgoretsky © (2005-08-24 10:03) [5]Значит они не выполняют реальной работы и выкинуты оптимизатором.
← →
Chaser © (2005-08-24 10:17) [6]Он почему-то пишет Хинт, что мол переменные "k", "p", и "z" не используются, хотя они ведь используются в программе, например
есть строка
cc:=SpinEdit1.Value-z-1;
или
pp:=SpinEdit1.Value-z;
или
xx:=j-p;
Потом здесь: Str.Add(Edit2.Text+"_"+IntToStr(pp)).
В чем проблема?
← →
Alexander Panov © (2005-08-24 10:30) [7]Chaser © (24.08.05 10:17) [6]
Сравни:function A(const c: Char): String;
var
Sym: Char;
begin
Sym:= c;
Result := "Результат - "+c;
end;
Компилятор здесь тоже скажет про Sym, что переменная не используется, потому что она действительно реально не используется.
Даже если ты присваиваешь переменной значение, а в пределах видимости эта переменная больше не используется, компилятор выбросит лишние операторы из твоего кода как ненужные. И он в джанном случае будет прав.
← →
Chaser © (2005-08-24 10:46) [8]И как же мне поступить в моем случае?
← →
Alexander Panov © (2005-08-24 12:26) [9]Chaser © (24.08.05 10:46) [8]
И как же мне поступить в моем случае?
Я думаю, что те переменные, которые не используются, надо убрать.
← →
Chaser © (2005-08-24 13:36) [10]Так они же используются в if"е!
← →
Alexander Panov © (2005-08-24 14:00) [11]>[10] Chaser © (24.08.05 13:36)
> Так они же используются в if"е!
Значит и эти if ни на что не влияют. А следовательно - не нужны.
← →
Adder © (2005-08-24 14:12) [12]Имеется код:
begin
z:=0;
k:=1;
p:=4;
if (i>1) and (i<6)
then
begin
x:=1;
А вот вопрос.... чему равно i?
Строка x:=1 и все последующее когда-нибудь выполняется?
← →
Adder © (2005-08-24 14:14) [13]И второй вопрос - отладчиком смотрел?
← →
Плохиш © (2005-08-24 14:20) [14]
> Chaser © (24.08.05 10:17) [6]
> Он почему-то пишет Хинт, что мол переменные "k", "p", и
> "z" не используются, хотя они ведь используются в программе,
1. Вообще-то компилятор говорит, что значения присвоенные переменным в отмеченных строчках не используются.
2. Кстати, ты сам ответил на свой вопрос:
> Если вместо if (i>1) and (i<6)
> поставить цикл, то они работают.
← →
Chaser © (2005-08-24 14:26) [15]Дело в том что есть еще внешний цикл по i, скажем от 0 до ListBox1.Items.Count-1.
Так что i попадает в интервал от 2 до 5.
Соответственно этот код
if (i>1) and (i<6)
then
begin
x:=1;
....
выполняется.
← →
Alexander Panov © (2005-08-24 14:27) [16]Тогда тебе придется весь код привести.
← →
Adder © (2005-08-24 15:01) [17]Chaser © (24.08.05 14:26) [15]
Дело в том что есть еще внешний цикл по i, скажем от 0 до ListBox1.Items.Count-1.
И при этом во внутреннем цикле ты делаешь
begin
z:=0;
k:=1;
p:=4;
Если пройтись отладчиком (с отключенной оптимизацией) - наверняка увидишь, что строчки
-> k:=k+2;
-> p:=p-1;
Ни на что не влияют
← →
Adder © (2005-08-24 15:13) [18]В смысле - "внутри цикла", а не во "внутреннем цикле" -)
Страницы: 1 вся ветка
Текущий архив: 2005.10.02;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.056 c