[Programação] Utilizando argumentos em C ou que diabos é esse argc e argv ?

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:

O comando ls em execução

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:

Comando ls sendo executado com 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:

Compilação e execução.

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

Textos Relacionados:

Deixe um Comentário

0 Comentários.

Deixe um Comentário

SEO Powered by Platinum SEO from Techblissonline