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*) #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; }
|
|
pekfos |
» 2018-09-25 23:34:28 find( "a", "b", "c", "d" );
|
Tak to ty tego nie zrobisz. Musisz skądś wiedzieć, ile jest argumentów. |
|
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? |
|
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. |
|
aksen Temat założony przez niniejszego użytkownika |
» 2018-09-26 12:44:56 Jak to ukryć preprocesorem? |
|
pekfos |
» 2018-09-26 12:46:00 Choćby tak (wariant z zerem jako ostatni argument) void _test( const char * _str,...);
#define test(...) _test(__VA_ARGS__, 0)
int main( void ) { test( "asd", "test" ); } |
|
Monika90 |
» 2018-09-26 14:49:57 Zero jest typu int. |
|
aksen Temat założony przez niniejszego użytkownika |
» 2018-09-26 15:09:30 racja, można zrobić to tak: #define test(...) _test(__VA_ARGS__, (char*)NULL)
a tu znalazłem ciekawy opis: http://c-faq.com/varargs/varargs1.html |
|
« 1 » |