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:
./bin/ejemplo.out ejemplo.config
Y recibir el path hacia el archivo config en la función config_create()
:
#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:
Y en la configuración del proyecto nos moveremos a la pestaña Arguments
, en donde vamos a poner nuestros argumentos separados por espacios:
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:
{
// 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
:
# Arguments when executing with start, memcheck or helgrind
ARGS=ejemplo.config
Esto nos será útil para cuando querramos ejecutar con Valgrind.