Подтвердить что ты не робот

Вызов функции перед основным

Возможный дубликат:
Является ли main() действительно началом программы на С++?

Можно вызвать функцию до запуска программы? Как я могу сделать эту работу в C++ или C?

4b9b3361

Ответ 1

У вас может быть глобальная переменная или член класса static.

1) static член класса

//BeforeMain.h
class BeforeMain
{
    static bool foo;
};

//BeforeMain.cpp
#include "BeforeMain.h"
bool BeforeMain::foo = foo();

2) глобальная переменная

bool b = foo();
int main()
{
}

Обратите внимание на эту ссылку - Зеркало http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.14/предлагаемая альтернатива - отправил Лундин.

Ответ 2

В C++ существует простой метод: использовать конструктор глобального объекта.

class StartUp
{
public:
   StartUp()
   { foo(); }
};

StartUp startup; // A global instance

int main()
{
    ...
}

Это потому, что глобальный объект создается до начала main(). Как отметил Лундин, обратите внимание на статичное финализацию порядка инициализации.

Ответ 3

Если вы используете компиляторы gcc и g++, то это можно сделать, используя __attribute__((constructor))

например:: Галерея В gcc (c)::

#include <stdio.h>

void beforeMain (void) __attribute__((constructor));

void beforeMain (void)
{
  printf ("\nbefore main\n");
}

int main ()
{
 printf ("\ninside main \n");
 return 0;
}

В g++ (С++)::

#include <iostream>
using namespace std;
void beforeMain (void) __attribute__((constructor));

void beforeMain (void)
{
  cout<<"\nbefore main\n";
}

int main ()
{
  cout<<"\ninside main \n";
  return 0;
}

Ответ 4

В С++ можно, например,

static int dummy = (some_function(), 0);

int main() {}

В C это недопустимо, поскольку инициализаторы для объектов со статической продолжительностью хранения должны быть постоянными выражениями.

Ответ 5

Я предлагаю вам ссылку на эту ссылку..

http://bhushanverma.blogspot.in/2010/09/how-to-call-function-before-main-and.html

Для компилятора GCC для Linux/Solaris:

#include

void my_ctor (void) __attribute__ ((constructor));
void my_dtor (void) __attribute__ ((destructor));

void
my_ctor (void)
{
printf ("hello before main()\n");
}

void
my_dtor (void)
{
printf ("bye after main()\n");
}

int
main (void)
{
printf ("hello\n");
return 0;
}

$gcc main.c
$./a.out
hello before main()
hello
bye after main()