可能重复:
main() 真的是 C++ 程序的开始吗?
可以在程序启动之前调用我的函数吗?我怎样才能在C++
or中完成这项工作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;
}
In C++ it is possible, e.g.
static int dummy = (some_function(), 0);
int main() {}
In C this is not allowed because initializers for objects with static storage duration must be constant expressions.
我建议你参考这个链接..
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()