Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

Процедура, VAR или НЕТ ?   Найти похожие ветки 

 
Хакер ©   (2004-12-11 16:57) [0]

Тут я задумался недавно над смыслом обьявления переменных в процедурах ..
- когда лучше обьявлять с VAR ?

Procedure test1(var a:integer);
Begin
inc(a);
end;


//учебник по ПАСКАЛЮ читал (прошу к нему не отправлять), понятно всё, за исключением того, что часто например в Windows.pas многие "внешние" функции обьявлеы БЕЗ var, хотя многие из них возвращают результат именно в передаваемую переменную, хотя по смыслу вроде как и не должны ..
(всё-таки кодинг на API достаточно сильно отличается от кодинга на стором, "чистом" Паскале :)))


 
Kerk ©   (2004-12-11 17:00) [1]


> возвращают результат именно в передаваемую переменную

В этом случае передается не переменная, а указатель.
При var происходит тоже самое.


 
Fay ©   (2004-12-11 18:14) [2]

2 Хакер ©   (11.12.04 16:57)  
> (всё-таки кодинг на API достаточно сильно отличается
> от кодинга на стором, "чистом" Паскале :)))

Чем именно?

> когда лучше обьявлять с VAR ?
Иногда лучше через указатель. Чтобы не писать
AnyFunc(PInteger(nil)^);
8)


 
_Lucky_   (2004-12-11 18:48) [3]

Выдержка из статьи о компиляторах
[http://www.rsdn.ru/article/devtools/perftest.xml]

Мы наступили на забавные, но потенциально очень неприятные грабли. Дело в том, что все современные языки умеют передавать параметры методов как по значению, так и по ссылке. В Delphi для этого используется ключевое слово var. Его необходимо указывать перед параметрами. Все это понятно, но Delphi оказалась единственным компилятором требующим указания модификатора передачи параметра по ссылке для массивов. Оказалось, что Delphi с упорством, достойным лучшего применения, запихивает массив в стек. Думаю, не надо разъяснять, как такая «забота о программисте» отражается на производительности. Но производительность страдает при относительно небольших размерах массивов, в нашем же случае один из массивов имел размер немногим менее ста мегабайт... Получив сообщение об ошибке, мы попробовали трассировать программу под отладчиком, но не тут то было. Пару раз Delphi попросту зависло, еще пару выдало загадочное сообщение. Да и сама ситуация сбивала с толку. Ну, да ладно... Через пару минут тупого разглядывания кода мы поняли, в чем проблема, и устранили ее. Мы понимаем, что сами виноваты, но надо было слышать те слова, которыми мы вспоминали в эти минуты Borland и все компьютеры вместе взятые. :)



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

Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.05 c
1-1102797398
Hmm
2004-12-11 23:36
2004.12.26
Проблемма: вместо 0,99999999999 пишет 1 - округляет. =((


1-1103096865
Змей
2004-12-15 10:47
2004.12.26
DriveCombobox


1-1103101701
Руслана
2004-12-15 12:08
2004.12.26
Скажите как изменить цвет строки в ListView?


1-1103086828
Андерсон
2004-12-15 08:00
2004.12.26
Экспорт в Excel буленовское поле


14-1102498783
Delphin
2004-12-08 12:39
2004.12.26
Умер комп





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский