O que é Argc e Argv em C++ no Ubuntu 20.04?
O parâmetro “argc” refere-se à contagem de argumentos, enquanto “argv” refere-se a um array de caracteres que contém todos os argumentos que são passados para a função “main()” através da linha de comando no momento da execução de um programa em C++. Aqui, você precisa saber que “argc” sempre mostra a contagem de argumentos como “1” a mais do que o número real de argumentos passados. Isso ocorre porque o nome do arquivo objeto também é contado como um argumento de linha de comando. Você pode passar os argumentos de linha de comando pertencentes a qualquer tipo de dados para a função “main()”. Tudo o que você precisa cuidar é que esses parâmetros sejam mencionados no protótipo da sua função “main ()” se você quiser acessá-los dentro dela. No entanto, a função “main()” pode funcionar perfeitamente bem sem esses dois parâmetros. Isso será discutido na próxima seção deste artigo, após o qual procederemos ao uso desses dois parâmetros em C++ no Ubuntu 20.04.
A função principal sem Argc e Argv em C++:
Em primeiro lugar, gostaríamos de dizer que a função “main()” em C++ pode funcionar perfeitamente bem mesmo sem usar os parâmetros “argc” e “argv”. Isso é representado no seguinte programa C++:
Temos uma função simples “main ()” neste programa sem nenhum argumento. Dentro desta função “main ()”, estamos apenas imprimindo uma mensagem de exemplo no terminal.
Em seguida, compilamos este programa C++ básico com a ajuda do comando mencionado abaixo:
$ g++ CommandLine.cpp –o CommandLine
Depois, executamos este programa executando o seguinte comando:
$ . / Linha de comando
A saída deste programa C++ simples é mostrada na imagem abaixo:
Executando um programa C++ sem passar nenhum argumento de linha de comando:
Agora, vamos tentar implementar um programa em C++ em que a função “main()” seja capaz de aceitar os parâmetros “argc” e “argv”, porém, não estaremos passando esses argumentos para ela enquanto executamos este programa a partir do terminal. O referido programa C++ é mostrado na imagem a seguir:
Neste programa C++, nossa função “main()” é capaz de aceitar os parâmetros “argc” e “argv”. No entanto, como não pretendíamos passar esses valores para ele neste exemplo específico, igualamos intencionalmente “argc” a “0” para que, quando tentarmos imprimir seu valor, ele não retorne nenhum valor lixo. Depois disso, imprimimos o valor do parâmetro “argc” no terminal. Em seguida, usamos um loop “for” para imprimir todos os argumentos da linha de comando no terminal.
Nós compilamos este código usando o comando mostrado abaixo:
$ g++ CommandLine.cpp –o CommandLine
Então, quando queríamos executar este programa, não passamos nenhum argumento de linha de comando para ele, como você pode ver no seguinte comando:
$ . / Linha de comando
A partir da saída deste programa C++ mostrado na imagem abaixo, você pode ver que nenhum argumento de linha de comando foi passado para esta função por causa da qual a contagem de argumentos era “0” e nenhum argumento foi impresso no terminal porque a matriz de caracteres “ argv” também estava vazio.
Executando um programa C++ com argumentos de linha de comando de tipo inteiro:
Agora, queremos executar o mesmo programa C++ passando argumentos de linha de comando do tipo inteiro para ele. Porém, antes de fazer isso, vamos modificar um pouco nosso código conforme a imagem a seguir:
A única modificação que fizemos neste código é que removemos a linha “argc=0” dele porque, neste exemplo, queremos imprimir o número real dos argumentos de linha de comando passados para este programa em tempo de execução. O restante do código é exatamente o mesmo usado na seção acima.
Recompilamos nosso código modificado usando o comando mostrado abaixo:
$ g++ CommandLine.cpp –o CommandLine
Então, para executar este código, usamos os seguintes argumentos de linha de comando:
$ . / Linha de comando 1 dois 3
Isso significa que passamos três argumentos de linha de comando do tipo inteiro para este programa C++ durante a execução, ou seja, 1, 2 e 3.
A saída deste programa modificado é mostrada na imagem abaixo:
O número total de argumentos retornados por este programa C++ é “4”, ou seja, três argumentos inteiros que passamos + o nome do arquivo objeto. Este programa também imprimiu os elementos da matriz de caracteres “argv” no terminal, ou seja, os argumentos reais do tipo inteiro que foram passados para este programa no momento da execução, junto com o nome do programa.
Executando um programa C++ com argumentos de linha de comando de tipo de caractere:
Agora, queríamos ver se o mesmo programa C++ funciona bem quando tentamos executá-lo passando argumentos de linha de comando de tipo de caractere para ele. Para isso, não precisamos modificá-lo mais. Nós só tivemos que executá-lo com argumentos de linha de comando de tipo de caractere da seguinte forma:
$ . / Linha de Comando a b c d e f
Isso significa que passamos argumentos de linha de comando de seis caracteres para este programa C++ durante sua execução, ou seja, a, b, c, d, e e f.
A saída produzida como resultado da passagem de argumentos de linha de comando de tipo de caractere para o mesmo programa C++ é mostrada abaixo:
O número total de argumentos retornados por este programa C++ é “7”, ou seja, argumentos de seis caracteres que passamos + o nome do arquivo objeto. Este programa também imprimiu os elementos da matriz de caracteres “argv” no terminal, ou seja, os argumentos do tipo de caractere real que foram passados para este programa no momento da execução, junto com o nome do programa.
Conclusão:
Este artigo teve como objetivo a discussão dos dois argumentos de linha de comando, também conhecidos como parâmetros da função “main()”, ou seja, “argc” e “argv”. Falamos sobre o significado desses dois parâmetros, declarando seu uso. Em seguida, compartilhamos alguns exemplos com você que descrevem o uso de “argc” e “argv” em C++ no Ubuntu 20.04. Além disso, também esclarecemos que mesmo sem usar esses parâmetros, a função “main()” poderia funcionar perfeitamente bem. Portanto, depois de ler este artigo, você entenderá o uso de “argc” e “argv” muito claramente em C++.