main函数之前还能运行程序?

在了解这个之前,我们首先要知道代码四区的概念:

  • 运行前:全局区,代码区
  • 运行后:堆区,栈区

堆区和栈区显然都是在程序运行后进行的,所以它们都是在main后面。

因此就需要从全局区和代码区入手,代码区显然不行,因此只剩下全局区了。

结果也就是可以定义全局对象或者变量。


方法一:

定义全局对象或者变量

全局变量:

当定义全局变量a的时候,就会调用show函数,因此也就在main函数前运行了show函数这段程序。

全局对象:

此时定义了全局对象a,所以就会调用类中的构造函数,因此构造函数这段程序也就在main函数之前运行了

两个的运行结果一样:


方法二:

  • 在函数开头加上 __attribute__((constructor)),就可以在main函数之前执行
  • 如果想要在main函数结束之后运行,可加上__sttribute__((destructor))
    (但是这个函数对编译器有要求,需要是GNUC的编译器(gcc,clang))

如下:

__attribute((constructor))void before()
{
    printf("before\n");
    func();
}


__attribute((destructor))void after()
{
    printf("after\n");

}
  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值