Tutorial.: Chamar uma função antes do main(), em C/C++
Durante o aprendizado, somos informados de que o código começa a ser executado pela função main() (ou "método main" em OO), mas e se quisermos executar alguma coisa ANTES do main?! Será que é possível?
Inicialmente, vem à cabeça a seguinte pergunta:
"Para que eu iria querer executar algo antes do main()?"
E a resposta é simples: para fins de logging, billing, polling ou qualquer outro objetivo imaginável proveniente de uma mente doentia de um alguém qualquer em algum lugar do planeta.
"Mas e então... como faz?"
Calma. Para isso é preciso entender o conceito de variáveis globais.
Uma variável global é aquela declarada fora de qualquer função - inclusive do main() -, pode ser de qualquer tipo e pode ser acessada por todos os escopos do código.
Devido ao fato de qualquer função poder utilizá-la e alterá-la, não é uma boa prática de programação pois, ao longo de um código razoavelmente longo, a legibilidade e rastreabilidade da variável pode se tornar bem difícil visto que nunca é necessário passá-la como argumento.
"Se não é uma boa prática, por que eu usaria?"
Em alguns casos, seu uso pode ser bastante útil contanto que haja controle no código, como será o caso que iremos exemplificar.
"É mesmo! Já estava quase esquecendo..."
A dica é criar um objeto global em que, o construtor da classe deste objeto contenha a função (método) que se deseja. Como este objeto é instanciado antes do programa começar a rodar (atráves do main()), essa função será executada antes. Veja o exemplo:
#include <stdio.h> /* **Este é um exemplo didático, esta biblioteca é oriunda do C. **Utilize a que melhor se adapta às suas necessidades **Boas práticas à parte, nada impede de utilizar conceitos OO em C ao invés de C++ */ //Protótipo da função/método desejado void fazerAlgo(); //Declarando uma classe qualquer de nome RedutoNERD class RedutoNERD{ public: RedutoNERD(){ //O construtor de uma classe possui o mesmo nome da classe fazerAlgo(); // A função/método à ser executado na instanciação do objeto } }; RedutoNERD rn; //Declarando globalmente o objeto 'rn', instância da classe RedutoNERD //Só aqui começa o main int main(){ /* **Seu código aqui** */ printf(" Reduto ");//Exemplo de texto return 0; } //Escopo da função/método desejada void fazerAlgo(){ /* **Aqui vai o código que se deseja executar na instanciação do objeto **antes do main conforme o tema do nosso tutorial */ printf(" NERD ");//Exemplo de texto }
Ao compilar este código, perceberemos que, o que está contido na função fazerAlgo() será executado antes de qualquer código contido no main(), isto é, a saída será a seguinte:
Vejam que, apesar da palavra "Reduto" vir no main(), ela aparece em segundo lugar na saída.
E por hoje é só pessoal!
Esperamos que este tutorial tenha sido proveitoso para vocês
Mandem suas dúvidas e sugestões para que possamos compartilhar com a nossa comunidade.
Fiquem atentos para mais dicas e tutoriais, aqui mesmo, no Reduto NERD!