Argumentos na linha de comando

Modifique valores de parâmetros de seu programa sem precisar recompilá-lo

Erbe Pandini Rodrigues
Computação para físicos
3 min readMay 20, 2017

--

São muito úteis para automatização e generalização de seus programas. Você compila uma única vez seu programa e captura seus argumentos (valores de variáveis) pela linha de comando. Neste exemplo criamos o programa args que recebe como seus argumentos um nome de um arquivo de entrada, dois valores e um nome de arquivo de saída, respectivamente. Veja o exemplo abaixo de como rodá-lo.

./args input.dat 2.3 3.4 output.dat

Repare que os argumentos passados devem ser separados por um ou mais espaços. O resultado do comando acima é o seguinte:

Número de argumentos = 5
Valor do argumento 0 = ./calc
Valor do argumento 1 = input.dat
Valor do argumento 2 = 2.3
Valor do argumento 3 = 4.5
Valor do argumento 4 = output.dat

Código do programa

//programa args.c#include <stdio.h>int main(int argc, char** argv)
{
printf("Número de argumentos = %d\n", argc);

int i;
for(i = 0; i < argc; i++)
{
printf("Valor do argumento %d = %s\n", i, argv[i]);
}
return 0;
}

Os parâmetros argc e argv de main dizem respeito aos argumentos da linha de comando.

argc - contém o número de argumentos lidos da linha de comando. O nome do programa é contado como argumento, por isso temos 5 argumentos.

argv - contém cada um dos argumentos, incluindo o programa, no formato texto:

argv[0] contém o nome do executável: ./calc
argv[1] contém o primeiro argumento: input.dat
argv[2] contém o segundo argumento: 2.3
argv[3] contém o terceiro argumento: 4.5
argv[4] contém o quarto argumento: output.dat

Observações importantes

  1. Os valores são todos passados como texto (string), logo devemos fazer o teste para verificar se são compatíveis com os tipos esperados. Em caso afirmativo a conversão de texto para o tipo apropriado deve ser feita.
  2. Se o valor passado for um nome de arquivo de entrada, é importante verificar se o arquivo existe. Se for um arquivo de saída, verifique se o nome e o caminho do arquivo são válidos.
  3. Sempre faça verificação dos argumentos e dê o tratamento apropriado em caso de erro. Um erro não tratado pode comprometer seus resultados.
  4. A verificação dos tipos dos argumentos pode ser feita utilizando-se expressões regulares. Bibliotecas de expressões regulares estão disponíveis em várias linguagens.

Exemplo simples com verificação de tipos

//programa args.c#include <stdio.h>   //printf
#include <ctype.h> //isdigit
#include <stdlib.h> //atoi
#include <string.h> //strlen
int main(int argc, char** argv)
{
int i, soma=0;
for(i = 1; i < argc; i++)
{
if(strlen(argv[i])==1 && isdigit(argv[i][0]))
{
soma = soma + atoi(argv[i]);
} else {
printf("erro - ignorando %s\n",argv[i]);
}
}
printf("Soma = %d\n", soma);
return 0;
}

O programa acima soma números inteiros de apenas um dígito passados como argumento. Se for passado qualquer outro tipo, este é ignorado.

  1. strlen(argv[i])==1 verifica se a string passada tem somente um caractere.
  2. isdigit(argv[i][0]) verifica se o primeiro elemento da string argv[i] é um dígito de 0 a 9.
  3. atoi(argv[i]) converte a string (de um caractere) em inteiro.

Exemplo de execução

./args 2 + 34d sd 4 5 33
erro - ignorando +
erro - ignorando 34d
erro - ignorando sd
erro - ignorando 33
Soma = 11

O código acima é válido para c e c++. No caso de outras linguagens, procure como capturar argumentos da linha de comando.

--

--