C++ 是否存在一个在main()主函数之前就执行的函数? 这个可以有!

简介: C++ 是否存在一个在main()主函数之前就执行的函数? 这个可以有!

一般地,大家都知道的常规:


   C/C++ 程序是从main()函数开始执行的

   main()函数有参数和返回值

   main()函数是操作系统调用的函数

   操作系统总是将main()函数作为应用程序的开始

   操作系统将main()函数的返回值作为程序的退出状态


那究竟有否能在main()主函数之前执行的函数呢?


答案:有!  


有些编译器支持关键字 attribute,能指定在 main 之前 (constructor) 、main 之后 (destructor) 分别执行一个函数。


 

__attribute__((constructor)) void init()    // 在main()之前工作
    __attribute__((destructor))  void exit()    // 在main()之后工作



但不是所有的编译器都支持相关功能关键字扩展,以下代码可在TDM-GCC 4.9.2 或 gcc7.5.0 上通过无错无警告编译:

#include <iostream>
using namespace std;
int i;
__attribute__((constructor)) void init()
{
    cout << __FUNCTION__ << endl;
    cout << "构造函数:初始化工作" << endl;
    i = 323;
}
__attribute__((destructor)) void exit()
{
    cout << __FUNCTION__ << endl;
    cout << "析构函数:退出程序 bye!" << endl;
}
int main()
{
    cout << __FUNCTION__ << endl;
    cout << "main()主函数:执行事务\n";
    cout << "输出变量 i = " << i << endl;
    return 0;
}



执行结果:


   init

   构造函数:初始化工作

   main

   main()主函数:执行事务

   输出变量 i = 323

   exit

   析构函数:退出程序 bye!

   --------------------------------

   Process exited after 0.4433 seconds with return value 0

   请按任意键继续. . .



目录
相关文章
|
13小时前
|
存储 算法 数据安全/隐私保护
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
5 0
|
17小时前
|
存储 自然语言处理 C++
刷题用到的非常有用的函数c++(持续更新)
刷题用到的非常有用的函数c++(持续更新)
6 1
|
1天前
|
存储 编译器 C++
【C++】内存管理和模板基础(new、delete、类及函数模板)
【C++】内存管理和模板基础(new、delete、类及函数模板)
13 1
|
7天前
|
存储 C++
c/c++宏定义(函数)
c/c++宏定义(函数)
|
9天前
|
编译器 C++
【C++进阶】引用 & 函数提高
【C++进阶】引用 & 函数提高
|
13天前
|
C++
C++从入门到精通:2.1.2函数和类——深入学习面向对象的编程基础
C++从入门到精通:2.1.2函数和类——深入学习面向对象的编程基础
|
13天前
|
存储 C++
C++从入门到精通:2.1.1函数和类
C++从入门到精通:2.1.1函数和类
|
21天前
|
机器学习/深度学习 定位技术 C++
c++中常用库函数
c++中常用库函数
39 0
|
22天前
|
算法 搜索推荐 C++
浅谈sort函数底层(一道c++面试的天坑题)
浅谈sort函数底层(一道c++面试的天坑题)
|
25天前
|
编译器 C++
C++ 解引用与函数基础:内存地址、调用方法及声明
C++ 中的解引用允许通过指针访问变量值。使用 `*` 运算符可解引用指针并修改原始变量。注意确保指针有效且不为空,以防止程序崩溃。函数是封装代码的单元,用于执行特定任务。理解函数的声明、定义、参数和返回值是关键。函数重载允许同一名称但不同参数列表的函数存在。关注公众号 `Let us Coding` 获取更多内容。
136 1