Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 965

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Каким образом можно описать функцию, число параметров которой было бы неограниченным? Примеры таких функций - Write(), WriteLn(), есть математические вроде Max() и др.

Bookworm22 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Bookworm22 (статус: Посетитель)
Вопрос отправлен: 7 октября 2007, 21:51
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Bookworm22!
Ну начнём с того, что Write(), WriteLn() не функции, а процедуры. Но это не столь важно. важно другое, что эти процедуры называются "магическими". тоесть компилятор знает о них и умеет генерировать код. Но на самом деле нельзя описать их прототип. Язык Паскаль/Делфи не позволяет описать и реализовать эту процедуру. На данный момент.
Но, если процедура написана на С++, то можно импортировать и использовать функции с множеством параметров. Возможность появилась с 6 делфи.
Но есть другой способ. Называется открытый константный массив. Его можно увидеть на примере функции Format. она описанна как
Format(s:string; param:array of const);
и передать параметры можно следующим образом
format('%s %d',['stroka', 5])
И если лишняя пара квадратных скобок вас не смущает, то это самый лучший способ
Что бы разобраться, читайте тут
http://rvelthuis.de/articles/articles-openarr.html (исходники, хотя текст англ)
http://www.delphisources.ru/pages/faq/base/array_of_const.html (на русском с примерами как понять какого типа параметры)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 7 октября 2007, 23:37
Оценка за ответ: 5

Комментарий к оценке: Спасибо, Вадим. Как раз та информация, которая и была нужна.

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 7 октября 2007, 23:08; участников в обсуждении: 1.
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 7 октября 2007, 23:08 [#1]:

Такие функции/процедуры на ассемблере делаются (а вот как именно, не знаю, поэтому и написал в форуме).

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.02 сек.