43

可能重复:
main() 真的是 C++ 程序的开始吗?

可以在程序启动之前调用我的函数吗?我怎样才能在C++or中完成这项工作C

4

5 回答 5

49

你可以有一个全局变量或一个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 发布。

于 2012-06-05T12:46:47.973 回答
34

里面有C++一个简单的方法:使用全局对象的构造函数

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

StartUp startup; // A global instance

int main()
{
    ...
}

这是因为全局对象是在main()开始之前构建的。正如Lundin所指出的,请注意静态初始化顺序惨败

于 2012-06-05T12:46:53.210 回答
21

如果使用gccg++编译器,那么这可以通过使用来完成__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;
}
于 2012-06-05T13:10:10.353 回答
18

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.

于 2012-06-05T12:54:50.513 回答
2

我建议你参考这个链接..

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()
于 2012-06-05T13:17:11.713 回答