URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6396
[ Назад ]

Исходное сообщение
"Optional parameters. C"

Отправлено psi , 20-Апр-07 14:22 
[Д|б]одрого времени суток, столкнулся со следующая проблемой:
имеется функция:

phis_init( int *flags)

Необходимо добавить новый параметер:

phis_init (int *flags, char *path)
                            
при этом параметер path может либо присутсвовать либо отсутствовать в вызове функции. Возможно ли это сделать ? Если да, то как ?

Заранее благодарен,
Vic.


Содержание

Сообщения в этом обсуждении
"Optional parameters. C"
Отправлено vic , 20-Апр-07 14:39 
>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
>имеется функция:
>
>phis_init( int *flags)
>
>Необходимо добавить новый параметер:
>
>phis_init (int *flags, char *path)
>
>при этом параметер path может либо присутсвовать либо отсутствовать в вызове функции.
>Возможно ли это сделать ? Если да, то как ?
>
>Заранее благодарен,
>Vic.

в C++ либо с помощью дефолтового значения:
void phis_init(int* flags, char* path = NULL);
либо перегрузкой функции:
void phis_init(int* flags, char* path);
void phis_init(int* flags);

в С никак или через одно место.
С другой стороны вызов phis_init(&flags, NULL); в случае не нужности второго параметра, разве что слегка напрягает (всего на 4 буквы) :)


"Optional parameters. C"
Отправлено psi , 20-Апр-07 18:35 
>>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
>>имеется функция:
>>
>>phis_init( int *flags)
>>
>>Необходимо добавить новый параметер:
>>
>>phis_init (int *flags, char *path)
>>
>>при этом параметер path может либо присутсвовать либо отсутствовать в вызове функции.
>>Возможно ли это сделать ? Если да, то как ?
>>
>>Заранее благодарен,
>>Vic.
>
>в C++ либо с помощью дефолтового значения:
>void phis_init(int* flags, char* path = NULL);
>либо перегрузкой функции:
>void phis_init(int* flags, char* path);
>void phis_init(int* flags);
>
>в С никак или через одно место.
>С другой стороны вызов phis_init(&flags, NULL); в случае не нужности второго параметра,
>разве что слегка напрягает (всего на 4 буквы) :)


Спасибо за ответ.
Дело не в том что напрягает, дело в том что вызов
call phis_init(INIT)

используется на протяжении многих лет и во многих программах (((.  

Best  regards,
Vic.


"Optional parameters. C"
Отправлено Bob , 25-Апр-07 12:48 
>>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
>>имеется функция:
>>
>>phis_init( int *flags)
>>
>>Необходимо добавить новый параметер:
>>
>>phis_init (int *flags, char *path)
>>
>>при этом параметер path может либо присутсвовать либо отсутствовать в вызове функции.
>>Возможно ли это сделать ? Если да, то как ?
>>
>>Заранее благодарен,
>>Vic.
>
>в C++ либо с помощью дефолтового значения:
>void phis_init(int* flags, char* path = NULL);
>либо перегрузкой функции:
>void phis_init(int* flags, char* path);
>void phis_init(int* flags);
>
>в С никак или через одно место.

А что, функции с переменным числом параметров уже отменили?


"Optional parameters. C"
Отправлено vic , 25-Апр-07 13:56 
>>>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
>>>имеется функция:
>>>
>>>phis_init( int *flags)
>>>
>>>Необходимо добавить новый параметер:
>>>
>>>phis_init (int *flags, char *path)
>>>
>>>при этом параметер path может либо присутсвовать либо отсутствовать в вызове функции.
>>>Возможно ли это сделать ? Если да, то как ?
>>>
>>>Заранее благодарен,
>>>Vic.
>>
>>в C++ либо с помощью дефолтового значения:
>>void phis_init(int* flags, char* path = NULL);
>>либо перегрузкой функции:
>>void phis_init(int* flags, char* path);
>>void phis_init(int* flags);
>>
>>в С никак или через одно место.
>
>А что, функции с переменным числом параметров уже отменили?

да нет, но тогда первый параметр должен так же нести инфу о количестве и типе остальных, а в данном случае он возможно несет совсем иную инфу...

Автор имеет проблему с кодом полученным в наследство, переписывать все или не имеет возможности или желания.


"Optional parameters. C"
Отправлено perece , 25-Апр-07 14:59 
>>>в С никак или через одно место.
>>
>>А что, функции с переменным числом параметров уже отменили?
>
>да нет, но тогда первый параметр должен так же нести инфу о
>количестве и типе остальных, а в данном случае он возможно несет
>совсем иную инфу...
>
>Автор имеет проблему с кодом полученным в наследство, переписывать все или не
>имеет возможности или желания.
а
#define phis_init(arg) real_phis_init(arg,NULL)
ему не подойдет?

\^P^/


"Optional parameters. C"
Отправлено vic , 25-Апр-07 15:19 
>>>>в С никак или через одно место.
>>>
>>>А что, функции с переменным числом параметров уже отменили?
>>
>>да нет, но тогда первый параметр должен так же нести инфу о
>>количестве и типе остальных, а в данном случае он возможно несет
>>совсем иную инфу...
>>
>>Автор имеет проблему с кодом полученным в наследство, переписывать все или не
>>имеет возможности или желания.

>#define phis_init(arg) real_phis_init(arg,NULL)
>ему не подойдет?
>
>\^P^/

т.к. дефайны это зло :)))))), то это то самое одно место ;)


"Optional parameters. C"
Отправлено vic , 25-Апр-07 16:10 
>>а
>>#define phis_init(arg) real_phis_init(arg,NULL)
>>ему не подойдет?
>>
>>\^P^/
>
>т.к. дефайны это зло :)))))), то это то самое одно место ;)
>

кстати, не катит он автору, т.к. нужна функция с одним названием, но с разным кол-вом аргументов, а не две функции. Две функции и без дефайна написать можно.

p.s. inline phis_init(arg) { real_phis_init(arg, NULL) };


"Optional parameters. C"
Отправлено perece , 25-Апр-07 18:30 
>>>а
>>>#define phis_init(arg) real_phis_init(arg,NULL)
>>>ему не подойдет?
>>>
>>>\^P^/
>>
>>т.к. дефайны это зло :)))))), то это то самое одно место ;)
кто сказал? в таком случае темплиты C++ - зло еще большее.
>
>кстати, не катит он автору, т.к. нужна функция с одним названием, но
>с разным кол-вом аргументов, а не две функции. Две функции и
>без дефайна написать можно.
>
>p.s. inline phis_init(arg) { real_phis_init(arg, NULL) };
я так понял, что есть уйма кода, в котором неохота разбираться, где phis_init вызывается с одним аргументом. и нужно в некоторых местах подправить, передав еще один аргумент. я так понимэ, что в этих самых "некоторых местах" он разобрался все равно, раз вызов меняется (добавляется арг) так в чем проблема поменять имя в этих самых местах?
функция-обертка проканает тоже. но я бы предпочел #define. (let's start yet another holy war, huh?)

\^P^/


"Optional parameters. C"
Отправлено FarID , 20-Апр-07 15:07 
>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
>имеется функция:
>
>phis_init( int *flags)
>
>Необходимо добавить новый параметер:
>
>phis_init (int *flags, char *path)
>
>при этом параметер path может либо присутсвовать либо отсутствовать в вызове функции.
>Возможно ли это сделать ? Если да, то как ?
>
>Заранее благодарен,
>Vic.

можно использовать implicit function declaration
например реализовать функцию в отдельном объектнике не включяя описание фукции как таковой