Skip to content

Pasar argumentos a main()

TIP

Antes de continuar, te recomiendo haber leído primero la guía de Argumentos para el main.

Es probable que para el TP requieran pasar argumentos a main() para, por ejemplo, parametrizar el archivo config que se va a utilizar:

bash
./bin/ejemplo.out ejemplo.config

Y recibir el path hacia el archivo config en la función config_create():

c
#include <stdlib.h>
#include <stdio.h>
#include <commons/config.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        fprintf(stderr, "Se esperaba: %s [CONFIG_PATH]\n", argv[0]);
        exit(1);
    }

    t_config *config = config_create(argv[1]);
    if (config == NULL) {
        perror("Ocurrió un error al intentar abrir el archivo config");
        exit(1);
    }

    void print_key_and_value(char *key, void *value) {
        printf("%s => %s\n", key, (char *)value);
    }
    dictionary_iterator(config->properties, print_key_and_value);

    config_destroy(config);
    return 0;
}

Sin embargo, para poder ejecutar el programa con todos sus parámetros desde un IDE o al hacer uso de los comandos para Valgrind vamos a necesitar entrar a la configuración de ejecución.

Ejecutar desde Eclipse

Arriba a la izquierda, vamos a seleccionar nuestra configuración de ejecución y hacer click en la ruedita ⚙️ de la derecha:

eclipse-01

Y en la configuración del proyecto nos moveremos a la pestaña Arguments, en donde vamos a poner nuestros argumentos separados por espacios:

eclipse-01

Ejecutar desde Visual Studio Code

Vamos a buscar la variable args del archivo launch.json, y vamos a editar la lista de argumentos en formato de array de strings de la siguiente forma:

json
{
  // Utilizar IntelliSense para aprender acerca de los posibles atributos.
  // Mantenga el puntero para ver las descripciones de los existentes atributos
  // Para más información, visite: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
      {
          "name": "run",
          "type": "cppdbg",
          "request": "launch",
          "program": "${workspaceFolder}/bin/${workspaceFolderBasename}.out",
          "args": [ 
            // TODO: Agregar los argumentos que se necesiten
            "ejemplo.config"
          ],
          "stopAtEntry": true,
          "cwd": "${workspaceFolder}",
          "environment": [],
          "externalConsole": true,
          "MIMode": "gdb",
          "setupCommands": [
              {
                  "description": "Enable pretty-printing for gdb",
                  "text": "-enable-pretty-printing",
                  "ignoreFailures": true
              }
          ],
          "preLaunchTask": "make-project"
      }
  ]
}

Ejecutar desde la consola

Debemos agregar los argumentos a la variable ARGS del archivo settings.mk:

makefile
# Arguments when executing with start, memcheck or helgrind
ARGS=ejemplo.config

Esto nos será útil para cuando querramos ejecutar con Valgrind.