2011-10-24 26 views
10

Tengo un programa que puede aceptar argumentos de línea de comandos y quiero acceder a los argumentos, ingresados ​​por el usuario, desde una función. ¿Cómo puedo pasar el *argv[], de int main(int argc, char *argv[]) a esa función? Soy un poco nuevo en el concepto de punteros y *argv[] parece demasiado complejo para que yo pueda resolverlo por mi cuenta.¿Cómo puedo pasar main * argv [] a una función?

La idea es dejar mi main lo más limpio posible moviendo todo el trabajo, que quiero hacer con los argumentos, a un archivo de biblioteca. Ya sé lo que tengo que hacer con esos argumentos cuando logro contactarlos fuera del main. Simplemente no sé cómo llevarlos allí.

Estoy usando GCC. Gracias de antemano.

Respuesta

23

Sólo tiene que escribir una función como

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

y que llaman en main como parse_cmdline(argc, argv) . Sin magia involucrada.

De hecho, no necesita pasar argc, ya que se garantiza que el miembro final de argv es un puntero nulo. Pero como tiene argc, también puede pasarlo.

Si la función no tiene por qué saber el nombre del programa, también puede decidir llamar como

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

¿Qué pasa cuando argv se define como const char * argv []? Así es OS X, y no puedo cambiar exactamente ABI de Apple ... – MarcusJ

+1

@MarcusJ Sí - ARC se interpone en XCode en OSX. Tuve que pasarlos a mi método de clase ObjC++ como 'getParams (argc, argv)', pero luego tuve que declarar esa función como 'static std :: map getParams (int argc, const char ** argv) 'Note el' ** argv'. Entonces, dentro del método de la clase, podría usar 'argv' tan normal como si estuviera en la función' main'. (El material del 'mapa' en el resultado de la devolución se debe a que mi función convirtió las variables en pares de mapas de clave = valor. No es posible que también lo haga). – Volomike

0

Solo pase argc y argv a su función.

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

O ...

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

Y entonces ...

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