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 ===
相关推荐
ALINX技术博客2 小时前
ALINX 亮相 2026 WAIC 世界人工智能大会,展示 AI 视觉 FPGA+GPU 异构计算与电子后视镜解决方案
人工智能·ai·fpga·世界人工智能大会·电子后视镜
Eloudy2 天前
RFSoC 4x2 参考手册
fpga
忆锦紫3 天前
vivado报错及解决【十】
fpga开发·fpga·vivado
忆锦紫4 天前
vivado报错及解决【十一】
fpga开发·fpga·vivado·xilinx
ALINX技术博客5 天前
AMD MoP 封装策略解读 | HBM 大热,为何 AMD Versal 系列反选 LPDDR5X?
fpga开发·fpga·amd·versal
repokey-Yao6 天前
AI 如何看懂 FPGA 大工程?RepoKey Starter 使用记录
人工智能·chatgpt·fpga
FPGA小迷弟17 天前
vivado中的AXI Interconnect到底应该怎么用,他的底层原理是什么,一篇文档全部理清楚!!!
网络协议·tcp/ip·fpga开发·verilog·fpga
徕卡1 个月前
GT收发器
fpga·gt
Passionate.Z1 个月前
基于FPGA的CLAHE自适应限制对比度直方图均衡算法硬件verilog实现
图像处理·嵌入式硬件·算法·fpga开发·fpga
北城笑笑1 个月前
Vibe Coding 主流 AI 编程工具:Claude Code 与 Codex 全面解析( Claude and Codex )
前端·ai·ai编程·fpga