The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Optional parameters. C, !*! psi, 20-Апр-07, 14:22  [смотреть все]
[Д|б]одрого времени суток, столкнулся со следующая проблемой:
имеется функция:

phis_init( int *flags)

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

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

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

  • Optional parameters. C, !*! vic, 14:39 , 20-Апр-07 (1)
    >[Д|б]одрого времени суток, столкнулся со следующая проблемой:
    >имеется функция:
    >
    >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, 18:35 , 20-Апр-07 (3)
      >>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
      >>имеется функция:
      >>
      >>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, 12:48 , 25-Апр-07 (4)
      >>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
      >>имеется функция:
      >>
      >>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, 13:56 , 25-Апр-07 (5)
        >>>[Д|б]одрого времени суток, столкнулся со следующая проблемой:
        >>>имеется функция:
        >>>
        >>>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, 14:59 , 25-Апр-07 (6)
          >>>в С никак или через одно место.
          >>
          >>А что, функции с переменным числом параметров уже отменили?
          >
          >да нет, но тогда первый параметр должен так же нести инфу о
          >количестве и типе остальных, а в данном случае он возможно несет
          >совсем иную инфу...
          >
          >Автор имеет проблему с кодом полученным в наследство, переписывать все или не
          >имеет возможности или желания.
          а
          #define phis_init(arg) real_phis_init(arg,NULL)
          ему не подойдет?

          \^P^/

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

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

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

            • Optional parameters. C, !*! vic, 16:10 , 25-Апр-07 (8)
              >>а
              >>#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, 18:30 , 25-Апр-07 (9)
                >>>а
                >>>#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, 15:07 , 20-Апр-07 (2)
    >[Д|б]одрого времени суток, столкнулся со следующая проблемой:
    >имеется функция:
    >
    >phis_init( int *flags)
    >
    >Необходимо добавить новый параметер:
    >
    >phis_init (int *flags, char *path)
    >
    >при этом параметер path может либо присутсвовать либо отсутствовать в вызове функции.
    >Возможно ли это сделать ? Если да, то как ?
    >
    >Заранее благодарен,
    >Vic.

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру