惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
H
Help Net Security
V
Visual Studio Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
The Cloudflare Blog
Martin Fowler
Martin Fowler
D
Docker
腾讯CDC
F
Fortinet All Blogs
雷峰网
雷峰网
GbyAI
GbyAI
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - 叶小钗

博客园 - 于光远

泛型编程 分区理论知识整理 SPI协议及驱动开发框架 I2C协议及驱动开发框架 使用qemu 加载linux-6.18.1内核 linux 内核 策略模式 单例模式 Linux性能分析:从监控到优化的完整工具链 C++模板元编程实现序列化与反序列化 引用 bootchart linux 脚本打印时间 接口编程 不定参数解析,结合tuple 类模板继承 std::ostream & operator<< Flash HIDL --HelloWorld
独立于main运行的程序
于光远 · 2022-03-10 · via 博客园 - 于光远
#include <iostream>
using namespace std;
#define INITIALIZER(f) \
    static void f(void) __attribute__((constructor)); \
    static void f(void)
#define DEINITIALIZER(f) \
    static void f(void) __attribute__((destructor)); \
    static void f(void)



static void IniFunc(){
    int a = 1+1; 
    printf("func()---1+1= %d\n",a);
    printf("func()---can not use std::cout \n");
    //cout<<"func()"<<endl;
    
}
static void deFunc(){
    cout<<"~func()"<<endl;
    int a = 1+2; 
    printf("1+2= %d\n",a);
    std::cout<<"std::cout"<<std::endl;
}
INITIALIZER(ff){
    IniFunc();
};

DEINITIALIZER(dd){
    deFunc();
    std::cout<<"can use cout"<<std::endl;
};

/*
static void f1(void) __attribute__((constructor)); 

void f1(void){
     printf("before main1111\n");
}
*/
/*
void static __attribute__((constructor)) before_main()
{
    printf("before main\n");
}
 
void static __attribute__((destructor)) after_main()
{
    printf("after main\n");

}
*/

int main(){

cout<< "in main"<<endl;
return 0;
}
ygy@ygy-VirtualBox:~/work/tmp$ g++ d.cpp 
ygy@ygy-VirtualBox:~/work/tmp$ ./a.out 
func()---1+1= 2
func()---can not use std::cout 
in main
~func()
1+2= 3
std::cout
can use cout

posted @ 2022-03-10 18:56  于光远  阅读(67)  评论()    收藏  举报