Tutorial.: Chamar uma função antes do main(), em C/C++ - Reduto Nerd
Home / C/C++ / desenvolvimento / Dicas & Tutoriais / Dicas e Tutoriais / Programação / Tutorial.: Chamar uma função antes do main(), em C/C++
Unknown 15:42 C/C++, desenvolvimento, Dicas & Tutoriais, Dicas e Tutoriais, Programação
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:
**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{
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
**Seu código aqui**
printf(" Reduto ");//Exemplo de texto
//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: