Передача параметров в подпрограммы

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Передача параметров в подпрограммы

Сообщение GAMER » 15.10.2008 14:32:17

Нужно передавать параметрами строки. Результат обработки - строки. Хочется делать оптимально.
Вариант 1. Описываем формальный параметр на прием типа String. При этом выделяется дополнительная память на этот параметр.
Параметр на возврат значения описываем через Var. Выделяется ли при этом память на формальный параметр?
Вариент 2. Передавать адреса на параметры. вроде оптимальнее, но больше возни.

Посоветуйте как правильнее, оптимальнее, или не заморачиваться с этим. "Да сколько там тех символов, можно хоть как" Такой вариант тоже устроит.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Передача параметров в подпрограммы

Сообщение Attid » 15.10.2008 14:35:44

Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Передача параметров в подпрограммы

Сообщение GAMER » 15.10.2008 15:13:40

Attid писал(а):http://freepascal.ru/article//freepascal/20070520123650/

Спасибо, то что нужно. Как это я проглядел, самому странно.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Передача параметров в подпрограммы

Сообщение GAMER » 30.10.2008 15:18:57

Есть ли разница при оптимизации кода? Использовать Var вместо Out, даже если параметр будет только отдаваться с подпрограммы? То есть Out использует для удобства читания кода или есть еще что-то?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Передача параметров в подпрограммы

Сообщение *vmr » 30.10.2008 15:21:32

GAMER писал(а):То есть Out использует для удобства читания кода или есть еще что-то?

Он очищает строку перед входом в процедуру
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Re: Передача параметров в подпрограммы

Сообщение GAMER » 30.10.2008 15:47:22

*vmr писал(а):
GAMER писал(а):То есть Out использует для удобства читания кода или есть еще что-то?

Он очищает строку перед входом в процедуру

То есть, повышается качество, ухудшается производительность (лишняя операция)? А если параметры не строки?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Передача параметров в подпрограммы

Сообщение *vmr » 30.10.2008 15:54:03

GAMER писал(а):А если параметры не строки?

только для managed-типов (строки, дин. массивы, варинанты, интерфейсы)
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Re: Передача параметров в подпрограммы

Сообщение Attid » 30.10.2008 19:07:02

GAMER писал(а):использует для удобства читания кода или есть еще что-то?

чтобы хинтов было меньше =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Передача параметров в подпрограммы

Сообщение Sergei I. Gorelkin » 30.10.2008 19:30:25

Если использовать var для возврата значения, компилятор будет ругаться на неинициализированную переменную. Если использовать out - не будет, т.к. исходное значение переменной в этом случае не имеет значения.
И, если переменная действительно не инициализирована, ее очистка перед вызовом ф-ции - это пустая операция, не ухудшающая быстродействие.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Передача параметров в подпрограммы

Сообщение *vmr » 30.10.2008 21:38:31

Sergei I. Gorelkin писал(а):Если использовать var для возврата значения, компилятор будет ругаться на неинициализированную переменную.

Это как? var подразумевает же инициализацию в outer-scope! Например, если мы оттуда читаем значение, а потом только пишем, то "ругания" компилятора — это уже какойто бред
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Re: Передача параметров в подпрограммы

Сообщение Logo » 30.10.2008 21:56:51

*vmr писал(а):
Sergei I. Gorelkin писал(а):Если использовать var для возврата значения, компилятор будет ругаться на неинициализированную переменную.

Это как? var подразумевает же инициализацию в outer-scope! Например, если мы оттуда читаем значение, а потом только пишем, то "ругания" компилятора — это уже какойто бред

Я так понимаю, что когда мы не передаем данные в подпрограмму, а только получаем из нее значение через var параметр, - тогда компилятор ругается.

Отдельно большой респект и благодарность для Sergei I. Gorelkin. Спасибо за многочисленные советы и тонкие подсказки!!!
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Передача параметров в подпрограммы

Сообщение SII » 30.10.2008 22:11:20

Sergei I. Gorelkin писал(а):И, если переменная действительно не инициализирована, ее очистка перед вызовом ф-ции - это пустая операция, не ухудшающая быстродействие.


Любое действие ухудшает быстродействие :) Зачем очищать параметр, объявленный как out, когда достаточно контролировать, чтобы из него не производилось чтение?
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Re: Передача параметров в подпрограммы

Сообщение Sergei I. Gorelkin » 30.10.2008 23:59:17

Процедура работает с out-параметром, как с обычной переменной. Записав туда что-то, она имеет полное право это что-то прочитать или изменить.
Кроме того, для строк это неважно, а для интерфейсов конкретные моменты удаления/добавления ссылок очень даже имеют значение.
Менять тут что-то очень чревато. А вот выкинуть бессмысленный вызов очистки неинициализированной переменной действительно вполне реально. Думаю, что когда-нибудь это будет реализовано.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru