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 ===
相关推荐
徕卡15 天前
GT收发器
fpga·gt
Passionate.Z17 天前
基于FPGA的CLAHE自适应限制对比度直方图均衡算法硬件verilog实现
图像处理·嵌入式硬件·算法·fpga开发·fpga
北城笑笑19 天前
Vibe Coding 主流 AI 编程工具:Claude Code 与 Codex 全面解析( Claude and Codex )
前端·ai·ai编程·fpga
XINVRY-FPGA19 天前
XC7A100T-2CSG324I AMD Xilinx Artix-7 FPGA
arm开发·人工智能·嵌入式硬件·神经网络·fpga开发·硬件工程·fpga
泛联新安21 天前
VHawk-CDC:国内首款自主可控跨时钟域分析验证工具,破解FPGA设计CDC验证难题
fpga·跨时钟域·验证工具
泛联新安22 天前
国产化FPGA测试工具链--让你的FPGA设计验证更高效、更安全、更自主
fpga·eda·半导体
XINVRY-FPGA24 天前
XCKU035-2FBVA676I AMD Xilinx Kintex UltraScale FPGA
arm开发·嵌入式硬件·网络安全·fpga开发·硬件工程·信号处理·fpga
米琪脆脆屋24 天前
0-1学习FPGA之底层资源——LUT
fpga开发·fpga
XINVRY-FPGA1 个月前
XC7Z035-2FFG900I Xilinx/AMD Zynq-7000 SoC FPGA
人工智能·嵌入式硬件·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
泛联新安1 个月前
VHawk-Lint——军工FPGA/ASIC设计质量自主可控的基石
fpga·芯片设计·eda