0

可能重复:
在进入主函数之前,你能用 C++ 打印任何东西吗?

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

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

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

4

2 回答 2

11

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

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

于 2013-02-01T17:26:55.110 回答
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;
}
于 2013-02-01T17:39:15.960 回答