是否有可能在运行代码时在main()之前调用其他方法/指令

时间:2013-02-01 17:25:21

标签: c++ invoke main

  

可能重复:
  Can you print anything in C++, before entering into the main function?

在调用int main()之前是否有可能运行任何其他指令?

int main(){cout<<"a";}

在main()调用之前,调用cout&lt;&lt;“b”;以前的某个地方。也许这个#define的东西可以提供帮助。

2 个答案:

答案 0 :(得分:11)

您不需要define。只需创建一个全局对象(在同一个文件中),它的ctor(或用于初始化它的任何其他东西,如调用函数)将在调用main之前运行。

编辑:同样,这些全局对象将在主要退出后被销毁,因此它们的析构函数将在那时运行。

答案 1 :(得分:2)

在main()运行之前构造全局对象。所以你可以定义一个类,将你的代码放在它的构造函数中,然后声明该类的全局实例:

class temp
{
public:
    temp()
    {
        cout << "before main" << endl;
    }

    ~temp()
    {
       cout << "after main" << endl;
    }
};

temp t;

int main()
{
    cout << "in main" << endl;
    return 0;
}

全局变量也在main()运行之前初始化。您可以定义一个返回值的函数,然后调用该函数并将值赋给其声明中的全局变量,如@jrok所示。

有些编译器还支持#pragma startup语句在启动时执行用户定义的函数(以及相应的#pragma exit语句用于关闭):

void beforeMain()
{
    cout << "before main" << endl;
}
#pragma startup beforeMain

void afterMain()
{
    cout << "after main" << endl;
}
#pragma exit afterMain

int main()
{
    cout << "in main" << endl;
    return 0;
}