Curso de C++ (Página 22b)

pagina022a Principal pagina023

CAPITULO 22b Funciones III

Argumentos de main.

Muy a menudo necesitamos especificar valores u opciones a nuestros programas cuando los ejecutamos desde la línea de comandos.

Por ejemplo, si hacemos un programa que copie ficheros, del tipo del "copy" de MS-DOS, necesitaremos especificar el nombre del archivo de origen y el de destino.

Hasta ahora siempre hemos usado la función "main" sin parámetros, sin embargo, como veremos ahora, se puedem pasar argumentos a nuestros programas a través de los parámetros de la función main.

Para tener acceso a los argumentos de la línea de comandos hay que declararlos en la función "main", la manera de hacerlo puede ser una de las siguientes:

int main(int argc, char *argv[]);

int main(int argc, char **argv);

Que como sabemos son equivalentes.

El primer parámetro, "argc", es el número de argumentos que se han especificado en la línea de comandos. El segundo, "argv", es un array de cadenas que contiene los argumentos especificados en la línea de comandos.

Por ejemplo, si nuestro programa se llama "programa", y lo ejecutamos con la siguiente línea de comandos:

programa arg1 arg2 arg3 arg4

argc valdrá 5, ya que el nombre del programa también se cuenta como un argumento.

argv[] contendrá la siguiente lista: "programa", "arg1", "arg2", "arg3" y "arg4".

Ejemplo:

#include <iostream.h>
 
int main(int argc, char **argv) 
{ 
   for(int i = 0; i < argc; i++) 
      cout << argv[i] << " "; 
   cout << endl; 
}

Funciones inline

Cuando escribimos el nombre de una función dentro de un programa decimos que "llamamos" a esa función. Esto quiere decir que lo que hace el programa es "saltar" a la función, ejecutarla y retornar al punto en que fue llamada.

Esto es cierto para las funciones que hemos usado hasta ahora, pero hay un tipo especial de funciones que funcionan de otro modo. En lugar de existir una sola copia de la función dentro del código, cuando se declara una función como "inline" lo que se hace es sustituir su código en el lugar de la llamada.

Sintaxis:

inline <tipo> <nombre_de_funcion>([<tipo> <identificador>[,<tipo> <identificador>,...]);

Esto tiene la ventaja de que la ejecución es más rápida, pero por contra, el programa generado es más grande. Se debe evitar el uso de funciones "inline", sobre todo cuando éstas son de gran tamaño, aunque con funciones pequeñas puede resultar práctico. Su uso es frecuente cuando las funciones tienen código en ensamblador, ya que en estos casos la optimización es mucho mayor.

En algunos casos, si la función es demasiado larga, el compilador puede decidir no insertar la función, sino simplemente llamarla. El uso de "inline" no es por lo tanto una obligación para el compilador, sino simplemente una recomendación.

Aparentemente, una función "inline" se comportará como cualquier otra función.

Nota: "inline" es exclusivo de C++, y no está disponible en C.

Ejemplos:

#include <iostream.h>
 
inline int mayor(int a, int b) { 
   if(a > b) return a; 
   else return b; 
}
 
int main() { 
   cout << "El mayor de 12,32 es " << mayor(12,32) << endl; 
   cout << "El mayor de 6,21 es " << mayor(6,21) << endl; 
   cout << "El mayor de 14,34 es " << mayor(14,34) << endl; 
   return 0; 
} 

pagina022a Principal pagina023