Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
11th
Апр
Правила пространства имён Delphi
Posted by maloy under Delphi, Архив
Retainer
Прошу Вас помочь с подсказкой, где можно посмотреть материал с подробными примерами объявлений/определений/вызовов процедур и функций НЕ в плане ООП ( с ним как раз нет проблем, почти всё понятно), А В ПЛАНЕ применения перекрестных вызовов функций из смежных модулей, вложенных функций и применения директивы FORWARD. Использую Дельфи 7. Причём хотелось бы посмотреть примеры комбинаций этих действий- или узнать, какие комбинации ошибочны (например, вложенное объявление с директивой forward возможно?, или несколько объявлений forward подряд?). Про директиву forward вообще хотелось бы просто понять — она существует только для разрешения косвенной рекурсии функций, то есть узкоспециализирована, или есть другие варианты её применения- если есть, то какие, где их посмотреть? Искал ответы у Архангельского, Флёнова, Марко Кенту, других уважаемых авторов, в русскоязычном и англоязычном хэлпе (в нём, кстати, очень мало полезных примеров кода). Имею опыт работы с Си/Ассемблером, с Дельфи 7 знаком менее года. Предпочитаю не приводить листинг для поиска ошибок, а найти источник с примерами и всё выяснить.
Stilet
|
Про эту директиву я знаю две вещи:
1. Это отживающий себе аттавизм, и используется редко.
2. Смысл ее в том чтобы дать возможность (насколько я помню) описывать параметры функции только в обьявлении, а в реализации писать только имя функи.
Вот пример:
function Calculate(X, Y: Integer): Real; forward;
........
function Calculate;
... { declarations }
begin
... { statement block }
end;
Вместо:
function Calculate(X, Y: Integer): Real;
...
function Calculate(X, Y: Integer): Real;
... { declarations }
begin
... { statement block }
end;
Без forward в старых паскалях приходилось писать параметры и в обьявлении и в реализации.
Сейчас такая проблема решена — forward обьявлния по умолчанию стоят.
Это насколько я помню…
DeKot
С директивой forward в Дельфи чисто практически дело обстоит следующим образом.Если Вы создаете свои методы и они используются следующим образом:
Процедура1;
Процедура2; (содержит вызов Процедуры1)
Процедура3; (содержит вызов Процедуры2)
Процедура4; (содержит вызовы Процедуры1 и Процедуры3)
В зтом случае не обязательно предварительно объявлять эти процедуры, а достаточно только описать их в такой же последовательности в коде программы (1,2,3,4).
Но встречаются случаи использования методов в следующем виде:
Процедура1; (содержит вызов Процедуры3)
Процедура2; (вызов Процедуры1)
Процедура3; (вызов Процедуры2)
В таком случае следует предварительно объявить Процедуру3 (с ее параметрами,если они есть) и директивой forward.Объявляется после глобальных var до implementation. А уже само описание процедур пишете в коде в нужном месте в той же последовательности (1,2,3).
Это же правило соблюдается и не только для рекурсивного вызова методов, а и для случаев с переменными и др. объектами.Например — в Процедуре1 используется переменная-объект типа TBitMap , а создается она (Create) в Процедуре3.
Тогда аналогично следует предварительно дать объявление Процедуре3 с директивой forward.
|
В Дельфи 7 еще надо использовать forward.
тема на форуме от 2009 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)