GCC的__attribute__用法

注册函数

c 复制代码
#include <stdio.h>

typedef int (*initcall_t)(void);

// 宏:注册函数到 myinit 段
#define USER_INITCALL(fn) \
    static initcall_t __initcall_##fn __attribute__((used, section("myinit"))) = fn;

// 函数注册
int init_func1(void) {
    printf("Init function 1 called\n");
    return 0;
}
USER_INITCALL(init_func1)

int init_func2(void) {
    printf("Init function 2 called\n");
    return 0;
}
USER_INITCALL(init_func2)

int init_func3(void) {
    printf("Init function 3 called\n");
    return 0;
}
USER_INITCALL(init_func3)

// GCC 会生成段符号
extern initcall_t __start_myinit[];
extern initcall_t __stop_myinit[];

int main() {
    printf("=== User initcall demo ===\n");

    for (initcall_t *p = __start_myinit; p < __stop_myinit; p++) {
        (*p)();
    }

    printf("=== All init functions called ===\n");
    return 0;
}
bash 复制代码
$ gcc -o user_initcall user_initcall.c
$ ./user_initcall
=== User initcall demo ===
Init function 1 called
Init function 2 called
Init function 3 called
=== All init functions called ===
相关推荐
明德扬20 分钟前
机器人多摄像头如何做FPGA多路视频聚合?
学习·fpga开发·fpga
Eloudy15 小时前
GPUNetIO开源实现与FPGA的 RoCEv2 通信延迟实验
gpu·fpga·rdma·roce·doca
unicrom_深圳市由你创科技1 天前
FPGA仿真正常,上板为何出错?
fpga
Eloudy2 天前
fpga-latency 指标分析与触发机制
fpga
Eloudy3 天前
基于 PTP 的 FPGA→RoCE→CPU 单向延迟测量实验方案
gpu·fpga
博览鸿蒙3 天前
新手怎么挑一块靠谱的FPGA开发板?
fpga开发·fpga·fpga开发板
FPGA小迷弟4 天前
【无标题】
fpga开发·dsp开发·fpga·sdr·无线电
Eloudy4 天前
RAM Player 实验:hololink-write 开流 + RoCEv2 接收分析
fpga
FPGA小迷弟5 天前
FPGA 应用技术能力的完整闭环(5-8)
fpga开发·dsp开发·fpga·sdr·无线电
Eloudy5 天前
vitis 工程 ping FPGA 丢包(~50% 随机)问题分析
fpga