Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

język C, funkcja ze zmienną ilością argumentów

Ostatnio zmodyfikowano 2018-09-26 15:09
Autor Wiadomość
aksen
Temat założony przez niniejszego użytkownika
język C, funkcja ze zmienną ilością argumentów
» 2018-09-25 23:23:30
Witam

Potrzebuję funkcji w C (nie C++) ze zmienną ilością argumentów,
przykład wywoływania funkcji: find("a", "b", "c", "d");

Chciałbym aby funkcja find (najlepiej w pętli)
policzyła i wypisała (z użyciem printf) wszystkie argumenty.

Znalezione w sieci przykłady ładnie działają na argumentach typu int,
(ale nie wiem jak zrobić to samo na char*)


C/C++
#include <stdio.h>
#include <string.h>
#include <stdarg.h>

void find( const char * tag1,...)
{
   
    char * arg;
    va_list ap;
    va_start( ap, tag1 );
   
    ????????????????
   
    va_end( ap );
   
}

int main( int argc, char * argv[] )
{
   
    find( "a", "b", "c", "d" );
   
    printf( "\n end\n" );
    return 0;
}
P-172417
pekfos
» 2018-09-25 23:34:28
C/C++
find( "a", "b", "c", "d" );
Tak to ty tego nie zrobisz. Musisz skądś wiedzieć, ile jest argumentów.
P-172418
aksen
Temat założony przez niniejszego użytkownika
» 2018-09-26 00:41:38
funkcja ich sobie nie policzy?
jak zrobić żeby sama policzyła?
P-172419
pekfos
» 2018-09-26 12:11:39
Nie da się policzyć. Musisz przekazać ilość argumentów w ten, czy inny sposób. Liczbą jako pierwszy argument, lub odpowiednio oznaczając ostatni, w tym przypadku pustym wskaźnikiem będzie dobrze. Możesz najwyżej ukryć to preprocesorem.
P-172421
aksen
Temat założony przez niniejszego użytkownika
» 2018-09-26 12:44:56
Jak to ukryć preprocesorem?
P-172422
pekfos
» 2018-09-26 12:46:00
Choćby tak (wariant z zerem jako ostatni argument)
C/C++
void _test( const char * _str,...);

#define test(...) _test(__VA_ARGS__, 0)

int main( void )
{
    test( "asd", "test" );
}
P-172423
Monika90
» 2018-09-26 14:49:57
Zero jest typu int.
P-172424
aksen
Temat założony przez niniejszego użytkownika
» 2018-09-26 15:09:30
racja, można zrobić to tak:

C/C++
#define test(...) _test(__VA_ARGS__, (char*)NULL)

a tu znalazłem ciekawy opis:
http://c-faq.com/varargs/varargs1.html
P-172425
« 1 »
  Strona 1 z 1