attribute((constructor)) 在C/C++中的应用

参考:https://www.jianshu.com/p/dd425b9dc9db

attribute介绍:

在C/C++编程中,attribute((constructor)) 是一个GCC编译器特有的属性,用于指定函数在 main() 函数执行之前自动执行,而 attribute((destructor)) 则指定函数在 main() 函数执行之后或 exit() 被调用后执行。这些函数通常用于初始化和清理程序中隐式使用的数据。

作用总结:

constructor参数: 让系统执行main()函数之前调用函数(被__attribute__((constructor))修饰的函数).同理, destructor让系统在main()函数退出或者调用了exit()之后,调用我们的函数.带有这些修饰属性的函数,对于我们初始化一些在程序中使用的数据非常有用.

示例代码:

以下是一个简单的示例,展示了如何使用 attribute((constructor))attribute((destructor)) 属性:

复制代码
#include <stdio.h>
#include <stdlib.h>
static void before_main(void) __attribute__((constructor));
static void after_main(void) __attribute__((destructor));
static void before_main() {
   printf("before main\n");
}
static void after_main(void) {
   printf("after main\n");
}
int main() {
   printf("main\n");
   return 0;
}

运行效果:

复制代码
before main 
main
after main 
相关推荐
不正经学生2 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技2 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风4 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx5 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_5 小时前
C++(22)——类型转换和IO流
开发语言·c++
小范同学_5 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
geovindu6 小时前
CSharp: 万年历
开发语言·后端·c#·.net
我找到地球的支点啦6 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
予昊6 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
weixin_461408587 小时前
Mybatis-flex小记
java·开发语言·mybatis