Баги или фича?

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Баги или фича?

Сообщение galover »

Всем привет. Заметил тут странные особенности компиляции:
вот такой код даст мессаджи в обоих выражениях:

Код: Выделить всё

if (true or Message('Whats a f..') = cmOk)
      {

      }

      if (false and Message('Whats a sh..') = cmOk)
      {

      }
хотя в других АЯ второй аргумент не вычисляется, если первый аргумент точно определяет результат выражения

и еще вот такой прикол

Код: Выделить всё


procedure Foo;
 var tmpVar;
{
  Message(tmpVar);
  tmpVar := 'Some val';
}

// Main code
Foo();
Foo();

вышеприведенный код выведет два сообщения - одно пустое, другое 'Some val'. Т.е. значения локальных переменных сохраняются у функции м/у вызовами, а не сбрасываются в значения по умолчанию. Жесть
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

по 1-му RTFM, здесь просто оптимизация не включена, на дельфи можно добиться точно такого же результата, если включить соответствующую опцию компиляции.

по 2-му опять же RTFM, вам ни кто не гарантирует, что локальные переменные будут снова инициализироваться "пустым" значением (опятьже можно сослаться на паскаль/дельфи). Вообще надо взять за обязательное правило инициализировать переменные.
к примеру, такой пример может вас завести очень далеко

Код: Выделить всё

function getsum: Double;
{
var Result: double;

   Result++;
   getsum := Result;
}

a := getsum; //скорее всего 1
a := getsum; //скорее всего 2
a := getsum; //скорее всего 3
...
[/code]
Жду выхода Вселенная 2.12!
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение Ged »

По первому проблема в ПИРе. Рассмотреть в планах будущих версий.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

Max_Fin
Где включить оптимизацию самому?
в каком месте f..g мануала про все особенности можно прочитать
Ged
Спасибо. Я тоже думаю что так быть не должно
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

Вопрос в догонку, нет ли в ПИР-е предложения на поддержку перегруженных функций, так надоело писать всякие суффиксы Ex и Ex2.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

что-то было насчет перегрузки всего фейса - vipprogr посмотрите "Реализация объектных интерфейсов". Да и можно параметр предусмотреть заранее - для указания типа обработки - и по нему сделать ветвление в одной и той же функции.
Ответить