|
Argumentos en la Línea de Comandos |
Anterior | Siguiente |
En las aplicaciones, tanto C++ como Java, al
ejecutarlas, se pueden especificar argumentos en la línea de llamada, y si los programas
están preparados para aceptarlos, podrán tomarlos en cuenta. Los usuarios del sistema
DOS estarán muy familiarizados con comandos del tipocopy ficheroA ficheroB En donde copy es el nombre del programa y ficheroA y ficheroB son los argumentos de la línea de comandos. Sin embargo, Java y C++ tratan de forma diferente los argumentos que se pasan en la línea de llamada. A los programadores C++ les resultarán familiares las líneas de código siguientes void main( int argc,char *argv[] ) { . . . } En este caso, el sistema operativo pasa dos parámetros a la función principal del programa. argc es un entero que indica el número de argumentos en la línea de comandos, y argv es un array de punteros, en donde cada puntero apunta a uno de los argumentos almacenados como cadena en algún lugar de la memoria. En algunos sistemas, argv[0] apunta a una cadena que contiene el nombre del programa y en otros apunta a basura. En C++, si el programa no ha sido escrito o preparado para recibir y tratar argumentos que se indiquen en la línea de comandos, no es necesario especificar nada en la declaración de la función main(). La sintaxis utilizada por Java es la que se ha visto en la miniaplicación inicial desarrollada al comienzo de esta sección public static void main( String args[] ) { . . . } En este caso, y a diferencia de C++, los parámetros sí deben aparecer en la declaración del método main(), aunque el programa Java no esté preparado para aceptar ninguno. También, a diferencia de C++, el nombre del programa no se proporciona en Java y el número de elementos en el array se puede obtener a través del método length() del array, con lo que no es necesario que el sistema operativo indique cuántos parámetros hay en la línea de comandos. Solamente como curiosidad, y también como muestra de una aplicación un poco más complicada que la impresión de un mensaje, el siguiente ejemplo, java301.java, imprime la lista de argumentos que se pasa a una aplicación Java. class java301 { public static void main( String args[] ) { for( int i=0; i < args.length; i++ ) System.out.println( args[i] ); } } Si se compila y, posteriormente, ejecuta esta aplicación con la llamada que se muestra, lo que se obtiene en pantalla es lo que se muestra a continuación % javac java301.java % java java301 estos son los argumentos que se pasan estos son los argumentos que se pasan Por comparación solamente, el ejemplo java301.cpp, reproduce la versión C++ de la aplicación anterior, para mostrar por pantalla los argumentos que se pasan a la aplicación #include <iostream.h> class java301 { public: static void MiClase( int argc,char *argv[] ); }; // El bucle requiere que esta función esté definida fuera de la // clase (los bucles en C++ no permiten funciones inline) void java301::MiClase( int argc,char *argv[] ) { for( int i=0; i < argc; i++ ) cout << argv[i] << endl; } void main( int argc,char *argv[] ) { java301::MiClase( argc,argv ); } Si se compila este código y se ejecuta con la siguiente llamada C:\> c:\pruebas\java301 estos son los argumentos que se pasan La salida que se genera en pantalla es: c:\pruebas\java301 estos son los argumentos que se pasan |
|