C语言中的弱符号(weak)用法及实例

时间:2024-01-26 12:03:53

一 符号概念:

  在C语言中,有强符号和弱符号,符号简单来说就是函数、变量的名字,对于全局(非局部、非static)的函数和变量,能不能重名是有一定规矩的,强、弱符号就是针对这些全局函数和变量来说的。  

二 声明方法:

 

  1 使用__attribute__((weak))修饰:

// function declaration

int __attribute__((weak)) power2(int x);

  // or

int power2(int x) __attribute__((weak));

// variable declaration;
extern int __attribute__((weak)) global_var;

2 使用#pragma weak修饰:

// function declaration
#pragma weak power2

int power2(int x);


三 实例分析:

#include <stdio.h>

void SVC_Handler (void) __attribute__((weak));

#pragma weak func2


void func2(void)
{
    printf("func2 is test\n");
}
void SVC_Handler (void) __attribute__((weak));

void SVC_Handler (void)
{
    int cnt = 0;


    while(1)
    {
        sleep(1);
        printf("svc handler cnt:%d \n",cnt++);
    }
}

#define vPortSVCHandler     SVC_Handler

int main()
{

    func2();
    vPortSVCHandler();


    return 0;
}