重複の可能性:
main()は本当にC ++プログラムの開始ですか?
プログラムの起動前に関数を呼び出すことはできますか?またはでこれを行うにはどうすればよいですC++
かC
?
重複の可能性:
main()は本当にC ++プログラムの開始ですか?
プログラムの起動前に関数を呼び出すことはできますか?またはでこれを行うにはどうすればよいですC++
かC
?
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のミラー/提案された代替案-Lundinによって投稿されました。
C++
簡単な方法があります:グローバルオブジェクトのコンストラクターを使用します。
class StartUp
{
public:
StartUp()
{ foo(); }
};
StartUp startup; // A global instance
int main()
{
...
}
これは、グローバルオブジェクトがmain()
開始前に構築されるためです。Lundinが指摘したように、静的初期化順序の大失敗に注意してください。
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 ++(c ++)::
#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;
}
C ++では、たとえば
static int dummy = (some_function(), 0);
int main() {}
Cでは、静的ストレージ期間を持つオブジェクトの初期化子は定数式でなければならないため、これは許可されていません。
このリンクを参照することをお勧めします。
http://bhushanverma.blogspot.in/2010/09/how-to-call-function-before-main-and.html
Linux / Solaris上のGCCコンパイラの場合:
#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()