2011-10-24 13 views
10

Mam program, który może przyjmować argumenty wiersza polecenia i chcę uzyskać dostęp do argumentów, wprowadzonych przez użytkownika, z funkcji. Jak mogę przekazać *argv[], oddo tej funkcji? Jestem trochę nowy w koncepcji wskaźników i *argv[] wygląda na zbyt skomplikowany, aby móc to samemu opracować.Jak przekazać główną funkcję * argv [] do funkcji?

Chodzi o to, aby pozostawić mój main tak czysty, jak to możliwe, przenosząc całą pracę, którą chcę zrobić z argumentami, do pliku biblioteki. Już wiem, co mam zrobić z tymi argumentami, kiedy uda mi się je zdobyć poza numerem main. Po prostu nie wiem, jak je tam zabrać.

Używam GCC. Z góry dzięki.

Odpowiedz

23

Wystarczy napisać funkcję takich jak

void parse_cmdline(int argc, char *argv[]) 
{ 
    // whatever you want 
} 

i nazwać jak w mainparse_cmdline(argc, argv) . Brak magii.

W rzeczywistości nie trzeba naprawdę przekazywać argc, ponieważ ostateczny członek argv ma zagwarantowany zerowy wskaźnik. Ale ponieważ masz argc, równie dobrze możesz go przekazać.

Jeśli funkcja nie musi wiedzieć o nazwie programu, można również zdecydować się nazwać jak

parse_cmdline(argc - 1, argv + 1); 
+2

Co gdy argv jest zdefiniowany jako const char * argv []? Tak właśnie jest OS X i nie mogę dokładnie zmienić ABI Apple ... – MarcusJ

+1

@MarcusJ Tak - ARC utrudnia to w XCode na OSX. Musiałem przekazać je do mojej metody klasy ObjC++, takiej jak 'getParams (argc, argv)', ale potem musiałem zadeklarować tę funkcję jak 'static std :: map getParams (int argc, const char ** argv) 'Zwróć uwagę na' ** argv'. Następnie, wewnątrz metody klasy, mógłbym użyć 'argv' jako normalnego, tak jakby był w funkcji' main'. (Rzeczy '' 'w wynikach zwracanych były spowodowane tym, że moja funkcja przekształciła zmienne w pary map = klucz wartości, ale nie możesz tego również zrobić.) – Volomike

0

Po prostu prześlij argc i argv do swojej funkcji.

0
SomeResultType ParseArgs(size_t count, char** args) { 
    // parse 'em 
} 

Albo ...

SomeResultType ParseArgs(size_t count, char* args[]) { 
    // parse 'em 
} 

A potem ...

int main(int size_t argc, char* argv[]) { 
    ParseArgs(argv); 
}