如何在Main函数之前和之后执行代码

2020-01-09  本文已影响0人  zypper

操作系统装载程序之后,首先运行的代码并不是main的第一行,而是某些特别的代码,这些代码准备好main函数执行所需要的环境,并且负责调用main函数,这时候你才可以在main函数里放心大胆的写各种代码:申请内存、使用系统调用、触发异常、访问IO。在main函数返回之后,他会记录main函数的返回值,调用atexit注册的函数,然后结束进程。
——《程序员的自我修养--链接、装载与库》

#include <QCoreApplication>
#include <QtDebug>

class Tmp {
public:
    Tmp() {
        qDebug() << Q_FUNC_INFO;
    }
    ~Tmp() {
        qDebug() << Q_FUNC_INFO;
    }
};

int main_before() {
    qDebug() << Q_FUNC_INFO;
    return 0;
}

void main_after() {
    qDebug() << Q_FUNC_INFO;
}

int doExit(void (*func)(void)) {
    return atexit(func);
}

int nBefore = main_before();
int nAfter = doExit(main_after);
Tmp oTmp;

int main(int argc, char *argv[])
{
    qDebug() << Q_FUNC_INFO;
//    QCoreApplication app(argc, argv);
//    return app.exec(); // 进入qt的事件循环
    return 0;
}


int main_before()
Tmp::Tmp()
int main(int, char**)
Tmp::~Tmp()
void main_after()
#ifdef __cplusplus
extern "C" {
#endif

__inline int boot_run_atstartup(void (*func)(void)) { func(); return 0;}
__inline int boot_run_atexit(void (*func)(void)) { return atexit(func);}

#ifdef __cplusplus
}
#endif

#define BOOT_RUN_STARTUP(func) VARIABLE_IS_NOT_USED static int __anonymous_run_variable_startup_##func = boot_run_atstartup(func)
#define BOOT_RUN_EXIT(func) VARIABLE_IS_NOT_USED static int __anonymous_run_variable_exit_##func = boot_run_atexit(func)
上一篇 下一篇

猜你喜欢

热点阅读