Uma dúvida clássica dos iniciantes em c, para que diabos serve aquele argc e argv que ficam na função main quando criamos o código?
Pois bem jovem gafanhoto, como já devem ter estuda nas aulas de algoritmos, funções são blocos de códigos dispostas pelo código-fonte, ela servem para facilitar a manutenção, codificação do programa, etc; elas possuem duas características elas podem ou não ter:
- Argumentos
- Retorno
A função deve fazer alguma e pode retornar o resultado dessa operação que ela fez, e os argumentos são parâmetros (ou informações se preferir) que passamos para a função.
A função main é uma função especial, pois ela é a primeira a ser executada e também quem receberá os argumentos argc e argv. Quando um programa e chamado podemos definir certas opções, por exemplo:

Digitei o comando ls, e ele executou e retornou para tela uma listagem dos arquivos e diretórios. Agora o que acontece quando coloco o parâmetro -l:

Viram a diferença ?
Como puderam ver, um ls e o ls -l executaram a tarefa de uma forma diferente, se o ls fosse um programa em C, a função main dele teria um argc e um argv, no seu argc teríamos o valor 1 e no argv uma string contendo -l.
Entenderam? Não? Hehe é simples o argc contará a quantidade parâmetros inseridos na hora que a aplicação foi executada, e o argv conterá os parâmetros inseridos, simples assim.
Vejamos um código exemplo que recebe argumentos e imprimi os mesmo na tela:
/*
Usando argumento
Codigo que apresenta o uso de argumentos em C
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("O nome do programa sempre sera em argv[0]\n");
printf("Nome do programa: %s\n\n", argv[0]);
printf("Em argc temos a quantidade de argumentos passados\n");
printf("Qtd de argumentos: %d\n\n", argc);
int i;
for(i = 0; i < argc; i++) {
printf("O argumento %d foi %s\n", i, argv[i]);
}
return 0;
}
Agora vamos compilar e executar com os comandos: gcc argumentos.c -o argumentos e execute com ././argumentos arg1 arg2 blabla qualquercoisa vejamos o resultado:

Pera ae que negócio e esse de ./argumento em argumento 0? Simples, sempre o primeiro argumento o argv[0] será o nome do programa. Igual nos seus shellscript com o $0. Agora que você está fera e manjando tudo de argc e argv fica abaixo um código-fonte de um calculadora básica que utiliza argumentos para ser executada, estude ela e explique nos comentários se entender para que serve e por que utilizei a função atof.
/*
Autor: Herberson S.M. aka VonNaturAustreVe
Email: vonnatur@0fx66.com
Data: 10/08/2011
-----------------------------------------------------------------------
English
calculator that demonstrates the use of arguments in C
Use:
calc_arg num1 operation num2
num1 and num2 = number wish
operation =
+ -> sum
- -> subtraction
x - multiplication
/ -> division
-----------------------------------------------------------------------
Portuguese
Calculadora com argumentos
Uso:
calc num1 operacao num2
num1 and num2 = numeros
Operacao:
+ -> sum
- -> subtraction
x - multiplication
/ -> division
-----------------------------------------------------------------------
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
float soma(float var1, float var2);
float subt(float var1, float var2);
float mult(float var1, float var2);
float divisao(float var1, float var2);
void erro();
int main(int argc, char **argv)
{
if(argc == 4) { //Testa para saber se tem todos os parametros necessarios para a execusao
switch(argv[2][0]) { //Usei argv[2][0] para pegar o sinal da operacao
case '+':
printf("Resultado: %f\n", soma(atof(argv[1]), atof(argv[3])));
break;
case '-':
printf("Resultado: %f\n", subt(atof(argv[1]), atof(argv[3])));
break;
case 'x':
printf("Resultado: %f\n", mult(atof(argv[1]), atof(argv[3])));
break;
case '/':
if(atof(argv[3]) == 0) { //Caso exista uma divisao por zero.
printf("Impossivel divisao por zero\n");
}
else{ //Se nao houver divisao por zero
printf("Resultado: %f\n", divisao(atof(argv[1]), atof(argv[3])));
}
break;
default:
erro();
break;
}
puts("");
}
else {
erro();
}
return 0;
}
//funcoes
void erro() {
printf("Parametros incorretos\n");
printf("Use: calc_arg numero operacao numero\n");
printf("A operacao deve ser +, -, x, /\n");
}
float soma(float var1, float var2) {
return var1+var2;
}
float subt(float var1, float var2) {
return var1-var2;
}
float mult(float var1, float var2) {
return var1*var2;
}
float divisao(float var1, float var2) {
return var1/var2;
}
Boa sorte, e bons estudos.
[]‘s

0 Comentários.