Fork me on GitHub

随笔 - 997  文章 - 5  评论 - 181  阅读 - 300万 

一 符号概念:

  在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;
}
复制代码

   

posted on   虚生  阅读(9877)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2018-02-28 U-boot的编译方式及目录结构解析
2018-02-28 C语言中volatile的作用和使用方法
点击右上角即可分享
微信分享提示