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:

Código do programa

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:

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

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

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

--

--