Recuperar argumentos de linha de comando em C++

Jinku Hu 12 outubro 2023
  1. Use a notação int main(int argc, char *argv[]) para recuperar argumentos de linha de comando em C++
  2. Use a notação int main(int argc, char **argv) para recuperar argumentos de linha de comando em C++
  3. Use o loop while para imprimir argumentos de linha de comando em C++
Recuperar argumentos de linha de comando em C++

Este artigo explicará vários métodos de como recuperar argumentos de linha de comando em C++.

Use a notação int main(int argc, char *argv[]) para recuperar argumentos de linha de comando em C++

Os argumentos da linha de comando são valores de string que podem ser passados ​​para o programa no início da execução. Normalmente, esses argumentos são amplamente utilizados pelos programas que possuem interface somente CLI, por exemplo, Utilitários de linha de comando do Unix. Observe que o programa C++ deve ter uma definição de função main especial para acessar os argumentos da linha de comando. Ou seja, a função main deve incluir os parâmetros como - (int argc, char *argv[]). O parâmetro argc representa a contagem total dos argumentos que foram passados ​​para o programa, incluindo o próprio nome do programa. Por outro lado, argv armazena a matriz das cadeias de caracteres que denotam os valores do argumento, que podem ser acessados ​​usando a notação de array - argv[0]. Lembre-se de que o array de ponteiros char tem a garantia de terminar com 0.

O exemplo a seguir demonstra o uso básico do loop for para imprimir cada valor de argumento no console. Porém, observe que a instrução if anterior garante que o programa tenha argumentos especificados e, em seguida, continue a execução.

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

Use a notação int main(int argc, char **argv) para recuperar argumentos de linha de comando em C++

Há outro protótipo de função main que é válido e se comporta exatamente como o anterior, então o incluímos para garantir que não haja confusão quando ocorrer a seguinte notação - int main(int argc, char **argv). Observe que o acesso aos elementos é feito da mesma maneira e eles podem ser percorridos usando o loop for.

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char **argv) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

Use o loop while para imprimir argumentos de linha de comando em C++

Outro método para acessar os valores do argumento é remover a referência do ponteiro argv até que seja igual a zero. Observe que, o array argv tem garantia de terminar com valor zero, que podemos utilizar para implementar um loop while para percorrer o array e imprimir os valores dos argumentos um por um. Observe que a chamada printf na instrução if abaixo atua como um relator de erro de que argumentos suficientes não foram passados ​​para o programa. A parte interessante é que o nome do programa é recuperado com a notação argv[0] e o especificador %s, tornando-o um método mais flexível do que codificar permanentemente o nome cada vez que ele muda.

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 4) {
    printf("Usage: ./%s arg1 arg2 arg3\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  while (*argv) {
    cout << *argv << endl;
    argv += 1;
  }

  exit(EXIT_SUCCESS);
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook