1. Con una cuenta podrás:

    • Publicar preguntas y pedir ayuda
    • Crear tutoriales
    • Acceder a contenido privado
    • Convertirte en un Héroe de la web
    Cerrar notificación
  2. Eres nuevo en la comunidad y necesitas ayuda?
    Sigue estos pasos y recomendaciones antes de publicar tu duda:
    Cerrar notificación

Tutorial Pasar argumentos a la función principal por Línea de comandos

Tema en 'C / C++' comenzado por Side Master, 7 de Enero de 2015.

?

¿Cómo consideras el nivel en cuanto al contenido del artículo?

Encuesta terminada 7 de Enero de 2016.
  1. Principiante

    0 votos
    0,0%
  2. Intermedio

    33,3%
  3. Avanzado

    66,7%
Se permite multiples votos.
  1. Side Master

    Side Master
    Moderador

    Se incorporó:
    6 de Enero de 2015
    Mensajes:
    257
    Me gusta recibidos:
    207
    Puntos de trofeos:
    43
    Género:
    Hombre
    Ocupación:
    Estudiante
    Página web:
    Hola que tal, bienvenidos sean al post. Este ya es un tema un poco intermedio, si bien lo notan, el orden de llevar los temas lo he dejado atras ya que escribiré de vez en cuando temas de principiantes, intermedio o avanzados.

    Como he dicho muchas veces el termino avanzado lo pones tu, si sientes que es avanzado y no entiendes muchas cosas, espero comentes adecuadamente, de esta manera sabré responderte.

    Ahora nos introducimos en temas de argumentos, argumentos que se pasan por medio de la consola a la función main(principal) del programa.

    Seleccionamos algún compilador para compilar nuestro programa, escribelo en cualquier editor y guardalo como program.c , luego compila con el mismo nombre. Esto resultaría program.exe , igualmente si estas en Linux compila con gcc, gcc -o program.c program .

    Nota: El código está encerrado en un bloque php, pero es totalmente código C, esto lo hago para que veas las diferencias entre las demás instrucciones.
    PHP:

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[]) {
       int i;
     
       printf("Ejecutable: %s\n", argv[0]);
       printf("Argumentos: ");
     
       for (i=1; i<argc; i++){
         printf("%s ", argv[i]);
       }
     
       printf("\nArgumentos Totales: %d\n", argc-1);
     
       system("PAUSE>NULL");
       return 0;
    }
     
    Actualmente utilizo Windows, entonces he decidido guardar este programa en el Desktop (Escritorio).
    Para ejecutar este programa por línea de comandos y pasarle argumentos a la función que ese es el objetivo de este artículo, entonces se hace lo siguiente.

    Ejecutas normalmente la consola o CMD (Command), Símbolo del sistema. Luego te ubicas en Desktop.
    El ejecutable se llama program.exe entonces escribes program.exe, luego escribes los argumentos o las acciones, ahora te queda dar un simple Enter.

    [​IMG]
    Al presionar Enter, el resultado es este:

    [​IMG]

    Ahora bien explicaré las partes esenciales del código.
    Código (Text):

    printf("Ejecutable: %s\n", argv[0]);
     
    argv: Este es un arreglo de punteros, lo cual significa que se pueden guardar cadenas de caracteres, las cantidades las interpreta como caracteres, igualmente se pueden hacer referencia a estructuras etc.

    agrv[o], como es un arreglo unidimensional, este guarda posiciones, la primer posición del array o arreglo guarda por defecto el nombre del ejecutable o programa en funcionamiento. Luego agrv[1] en adelante, guarda las cadenas que se les hayan pasado por parametros a la función main.

    Por tanto en este programa argv[1] = -u, argv[2] = Side, argv[3] = Master. Si en un dado caso hubieses argumentado más en la consola separando con un espacio entonces se crean más espacios en el array, ya que es dinámico, asigna memoria automaticamente, gracias a que es un puntero.

    Entonces, en la instrucción se esta imprimiendo lo siguiente: Ejecutable: program.exe .

    Código (Text):

    printf("Argumentos: ");
     
       for (i=1; i<argc; i++){
         printf("%s ", argv[i]);
       }
     
    La primer instrucción imprime la palabra Argumentos: , como vemos entonces la parte lógica esta en el ciclo for, donde explicaré que es lo que está pasando.

    En seudo-código dice: Para una variable i = 1; Hasta que la variable i sea < al valor de agrc; Incrementar el valor de la variable i en 1.

    Pero!, ¿Qué es agrc?
    Esta es una variable que argumenta contar el número de cadenas ingresadas por la consola y recividas en el array dinámico argv.

    Entonces, la lógica esta en que i empiece en 1 ya que el valor de argv[0] es el nombre del programa, partiendo de ahí viene los argumentos pasados por consola. Como agrc tiene el total de argumentos entonces tiene lógica al tratar de recorrer argvy de esta manera mostrar los argumentos insertados.

    Esto resultaría: Argumentos: -u Side Master.
    Código (Text):

    printf("\nArgumentos Totales: %d\n", argc-1);
     
    Ahora bien, con esta última instrucción imprime Argumentos Totales con una cantidad entera, que es el resultado de argc, a este se le hace una operación aritmetica de la resta para disminuir el resultado en 1, ya que el nombre del programa no cuenta como argumento.

    El programa no es muy dificil, muchos consideran que trabajar con este tipo de cosas es algo muy avanzado en el lenguaje, pero yo no lo creo ya que existen temas con un buen nivel de complejidad mayores que este.

    Espero te haya sido de ayuda, si tienes alguna duda, comentalo. Sino espero que te haya gustado.
    Firma: "Side Master".
     

    Archivos adjuntos:

    • 1.PNG
      1.PNG
      Tamaño de archivo:
      5,2 KB
      Visitas:
      30
    • 2.PNG
      2.PNG
      Tamaño de archivo:
      6,5 KB
      Visitas:
      30
    • program.zip
      Tamaño de archivo:
      31,5 KB
      Visitas:
      1
    A JayP y Strong Backers les gusta esto.
  2. Strong Backers

    Strong Backers Nuevo Miembro

    Se incorporó:
    7 de Enero de 2015
    Mensajes:
    25
    Me gusta recibidos:
    15
    Puntos de trofeos:
    3
    Género:
    Hombre
    Muy buen aporte...:D
     
  3. Side Master

    Side Master
    Moderador

    Se incorporó:
    6 de Enero de 2015
    Mensajes:
    257
    Me gusta recibidos:
    207
    Puntos de trofeos:
    43
    Género:
    Hombre
    Ocupación:
    Estudiante
    Página web:
    Muchas gracias por comentar, la verdad nosé si me salte muy largo con este post. Espero que no. Buen día.
     
    A Strong Backers le gusta esto.
  4. Strong Backers

    Strong Backers Nuevo Miembro

    Se incorporó:
    7 de Enero de 2015
    Mensajes:
    25
    Me gusta recibidos:
    15
    Puntos de trofeos:
    3
    Género:
    Hombre
    esta muy bueno el tutorial, se esperan mas colega.
     
    A Side Master le gusta esto.
  5. Side Master

    Side Master
    Moderador

    Se incorporó:
    6 de Enero de 2015
    Mensajes:
    257
    Me gusta recibidos:
    207
    Puntos de trofeos:
    43
    Género:
    Hombre
    Ocupación:
    Estudiante
    Página web:
    Esta bien, pendiente a todo hee.
     
    A Strong Backers le gusta esto.
  6. JayP

    JayP Miembro Activo

    Se incorporó:
    7 de Enero de 2015
    Mensajes:
    125
    Me gusta recibidos:
    72
    Puntos de trofeos:
    28
    Género:
    Hombre
    No sé mucho de programación pero pocas personas se toman el tiempo para compartir , explicar de forma clara y gratuita su conocimiento.

    Te felicito colega ;).
     
    A Side Master le gusta esto.
  7. Side Master

    Side Master
    Moderador

    Se incorporó:
    6 de Enero de 2015
    Mensajes:
    257
    Me gusta recibidos:
    207
    Puntos de trofeos:
    43
    Género:
    Hombre
    Ocupación:
    Estudiante
    Página web:
    Gracias por comentar compañero, me gusta mucho la programación y también compartir. Buen día.
     
    A Strong Backers le gusta esto.
  8. griselcesar

    griselcesar Miembro Activo

    Se incorporó:
    8 de Enero de 2015
    Mensajes:
    135
    Me gusta recibidos:
    61
    Puntos de trofeos:
    28
    Género:
    Hombre
    Ocupación:
    Estudiante
    Localización:
    Venezuela
    Página web:
    Esto es útil para los que venimos trabajando con Unix desde hace un gran tiempo...
     
  9. Side Master

    Side Master
    Moderador

    Se incorporó:
    6 de Enero de 2015
    Mensajes:
    257
    Me gusta recibidos:
    207
    Puntos de trofeos:
    43
    Género:
    Hombre
    Ocupación:
    Estudiante
    Página web:
    Así es @griselcesar . Es muy importante, para todos los que necesitan trabajar siempre por consola. Gracias por comentar. Saludos... :);)
     
    A Strong Backers le gusta esto.

Comparte esta página