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 ===
相关推荐
泛联新安12 小时前
VHawk-CDC:国内首款自主可控跨时钟域分析验证工具,破解FPGA设计CDC验证难题
fpga·跨时钟域·验证工具
泛联新安1 天前
国产化FPGA测试工具链--让你的FPGA设计验证更高效、更安全、更自主
fpga·eda·半导体
XINVRY-FPGA3 天前
XCKU035-2FBVA676I AMD Xilinx Kintex UltraScale FPGA
arm开发·嵌入式硬件·网络安全·fpga开发·硬件工程·信号处理·fpga
米琪脆脆屋3 天前
0-1学习FPGA之底层资源——LUT
fpga开发·fpga
XINVRY-FPGA5 天前
XC7Z035-2FFG900I Xilinx/AMD Zynq-7000 SoC FPGA
人工智能·嵌入式硬件·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
泛联新安6 天前
VHawk-Lint——军工FPGA/ASIC设计质量自主可控的基石
fpga·芯片设计·eda
派勤电子6 天前
2026 支持 FPGA 工控机 AI 加速应用场景详解
gpu·fpga·npu·工控机·ai工控机·fpga工控机·工业级工控机
不会武功的火柴7 天前
SystemVerilog语法(11)-面向对象编程下篇
面向对象·fpga·systemverilog·ic验证
ALINX技术博客7 天前
【黑金云课堂】FPGA技术教程FPGA基础:FIFO与Uart通信
fpga开发·uart·fpga·fifo
南檐巷上学11 天前
基于Zynq-7020的带有正弦波发生器的8051软核设计
单片机·嵌入式硬件·fpga开发·fpga