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

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

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

    Вы можете иметь глобальную переменную или static член classа.

    1) static член classа

     //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 / предлагаемая альтернатива – опубликовано Lundin.

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

     class StartUp { public: StartUp() { foo(); } }; StartUp startup; // A global instance int main() { ... } 

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

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

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

     #include  void beforeMain (void) __attribute__((constructor)); void beforeMain (void) { printf ("\nbefore main\n"); } int main () { printf ("\ninside main \n"); return 0; } 

    В g ++ (c ++) ::

     #include  using namespace std; void beforeMain (void) __attribute__((constructor)); void beforeMain (void) { cout<<"\nbefore main\n"; } int main () { cout<<"\ninside main \n"; return 0; } 

    В C ++ это возможно, например

     static int dummy = (some_function(), 0); int main() {} 

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

    Я бы предложил вам ссылку на эту ссылку ..

    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() 
    Interesting Posts

    Можете ли вы определить часовой пояс из переменных запроса?

    Почему ConcurrentHashMap предотвращает нулевые ключи и значения?

    Notepad ++: Как изменить клавишу Tab на другой ключ для вставки автозаполнения? Конфликт с другим плагином

    Как отключить проверку файловой системы NTFS при загрузке системы?

    литье массив объектов в массив Integer

    Android Lollipop, AppCompat ActionBar пользовательский вид не занимает всю ширину экрана

    Thread.Sleep () без замораживания пользовательского интерфейса

    Как установить каталог в качестве диска в Windows 7?

    Как вы не можете RichTextBox обновить его отображение?

    Почему мой указатель мыши движется самостоятельно?

    Как указать порт для запуска проекта, основанного на создании приложения-приложения?

    LIMIT не работает в ActiveDataProvider

    Можно ли автоматически удалить панель поиска Firefox?

    Android-импорт java.nio.file.Files; не может быть решен

    Ошибка. Исправьте конфликт версии либо путем обновления версии плагина google-services

    Давайте будем гением компьютера.