Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение С функции со значением по умолчанию 
V
    Опции темы
vadiml
Дата 4.10.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Хочу подключить функцию на С, которая имеет в описании значение по умолчанию:
void func(int i1, int i2 = 0);

хотелось бы чтоб и перле можно было её вызывать и как func($i1, $i2), и как func($i1)

я сейчас для этого описываю в XS-файле 2 варианта:
Код

PROTOTYPES: DISABLE

void
func1(i1, i2)
    int i1
    int i2
    CODE:
        func(i1, i2);

void
func2(i1)
    int i1
    CODE:
        func(i1);


и потом  в pm-файле я их объединяю:
Код

sub func {
    return func1(@_) if scalar(@_) = 1;
    return func2(@_) if scalar(@_) = 2;
    croark("Usage func(i1) or func(i1, i2)\n");
}


использую это из-за того, что при генерации С файла на основе XS файла в начале функции добавляется проверка:
Код

if (items != 1)
        Perl_croak(aTHX_ "Usage: func(i1)");
и
if (items != 2)
        Perl_croak(aTHX_ "Usage: func(i1, i2)");


Может есть возможность отключить/обойти эту проверку, чтоб не надо было использовать 2 функции, а можно было сделать проверку внутри (что-то наподобие):
Код

void
func(i1, i2=0) # ???
    int i1
    int i2
    CODE:
        if ( items == 1 )
            func(i1);
        else if ( items == 2 )
            func(i1, i2);
        else
            Perl_croak(aTHX_ "Usage: func(i1) or func(i1, i2)");

?

самому С файл писать не хочется, да и не знаю пока как его сразу подключить.
PM MAIL Jabber   Вверх
arto
Дата 4.10.2007, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc perlxs | less -p "Default Parameter Values"
PM MAIL ICQ   Вверх
vadiml
Дата 5.10.2007, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Спасибо

что-то я сам не досмотрел этого :(
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1223 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.