TransWikia.com

Boas práticas em C sobre chamada de "main()"?

Stack Overflow em Português Asked by Alex J on December 16, 2021

Estou desenvolvendo um aplicativo simples para trabalho de faculdade, e tenho dúvida em usar a função main() no código para em vez de sair voltar para o começo do programa, isso seria uma boa prática ou não?

Abaixo tenho um exemplo na minha função cadastro(), repare que no final do programa eu coloquei o main(), caso o usuário digitar 4, 5 ou outra tecla qualquer, fazendo assim que ele não saia do programa.

void cadastro(){
    int op;
    static int linha;

    cabecalhoCadastrar();

    do{
        //printf(":::::Cadastrar cliente:::::nn");

        if(linha >= 5){
            printf("nAgenda lotada!n");
            break;
        }
        else{
            printf("nNome: ");
            fflush(stdin);
            fgets(cliente[linha].nome, 50, stdin);

            printf("Telefone: ");
            fflush(stdin);
            scanf("%d", &cliente[linha].telefone);

        /*  printf("Endereço: (rua, número, complemento): ");
            fflush(stdin);
            fgets(cliente[linha].endereco, 150, stdin);*/

            linha++;

            printf("nCliente cadastrado com sucesso!nnn");
            system("pause");
            system("cls");

            cabecalhoCadastrar();
            printf("n1- Cadastrar clienten2- Sairn");

            fflush(stdin);
            scanf("%d", &op);
            system("cls");
        }
    }while(op == 1);
    main();
}

One Answer

Como eu costumo dizer: esqueça boas práticas. Só pode seguí-las sem causar estrago quem não precisa delas, o que é um paradoxo.

É uma questão de estar certo ou não, e se é adequado ou não para o contexto.

Neste caso específico está errado. Pode até funcionar em exercício, mas se entrar várias vezes na função main() como está fazendo vai acumular na pilha e isto fará dar um estouro de memória em algum ponto.

Dependendo de outros fatores pode até causar outros problemas, isto é a pior coisa que pode fazer, um exemplo é quando usa o static que quase nunca é adequado, especialmente neste caso onde a chamadas recursivas sem querer.

Quando termina a execução de uma função deve apenas returnar para a função chamadora. Não deve nunca chamar a função chamadora ou outra que possa chamar a função chamadora para evitar um laço indesejado e estouro de pilha.

Tem vários outros erros nesta aplicação.

Answered by Maniero on December 16, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP