0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何给C语言中的函数定义两个不同的名字?

嵌入式软件实战派 来源:嵌入式软件实战派 2023-12-19 16:21 次阅读
最近有位哥问我,如何给C语言中的函数定义两个不同的名字?就是这两个名字都是指向同一个函数,同一个地址,而且两个名字都可以当做函数来用的那种。 我想都没想说,宏定义可以么? 他摇摇头,说不是这种。 我接着说,指针可以么? 他还是摇头…… 他看我有点不耐烦,接着说,用宏定义总是觉得是伪造的函数,宏函数也终究不是函数,有些场合也替代不了函数。例如
// code.c
voidcode_fxck(int times)
{
//balabala...
}


//code_gen.h
#definecode_shxtcode_fxck
externvoidcode_shxt(inttimes);
上面的代码,code_gen.h如果是工具软件生成的,很可能就没有#definecode_shxtcode_fxck这个定义,就会出现编译出错。 他继续说,用函数指针吧,他们本身的地址是不一样的,即指针的地址和函数的地址不是同一个。例如:
// code.c
voidcode_fxck(int times)
{
//balabala...
}
const 
//code_run.c
constvoid(*code_shxt)(int)=code_fxck;
&code_fxck&code_shxt是不一样的。 我说,那定义两个功能一样的函数吧。
// code.c
voidcode_fxck(int times)
{
//balabala...
}
void code_shxt(int times)
{
  // balabala...
}

他说这两个函数不在同一个地址空间,而且增加代码量了,万一这是一个超大的函数呢…… 我发现他发挥他的专长——杠起来了! 我心想,尼玛,我就不信治不了你了! 那就用汇编
/* code.asm */
.thumb 
.thumb_func
.globl code_fxck
.globl code_shxt
code_shxt:
code_fxck:
/*balabala...*/
他说,汇编太麻烦了,写起来效率很低…… 我再出一招,用链接符号吧
// code.c
void  __attribute__((section(".YOUR_FXXK_CODE")))code_fxck(inttimes)
{
//balabala...
}


/*fxxk_proj.ld */
/*...*/
.your_fxx_code : ALIGN(1024)
{
_code_shxt =ABSOLUTE(.);
KEEP(*(*.YOUR_FXXK_CODE))
}>FLASH
code_shxt=_code_shxt;

我继续解释着,这里code_shxtcode_fxck就是同一个地址了,怎样? 他还要杠,用字段来限制,好像不是很自由,而且不同环境用的链接脚本ld格式还不一样…… 我X,要逼我出大招么,靠,老子今天就跟你杠到底!
// code.c
void code_fxck(inttimes)
{
//balabala...
}


voidcode_shxt(inttimes)__attribute__((alias("code_fxck")));
这行吗?! 他心里没底,有点不相信,放低了声调说,这……行吗?就算可以……那么如果编译器不支持这个__attribute__呢?




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136779

原文标题:C语言一个函数能不能有两个名字?

文章出处:【微信号:embedded_sw,微信公众号:嵌入式软件实战派】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中定义宏的用法和使用场景

    C语言中,预定义宏是由编译器提供的一组特殊标识符,可以在程序中直接使用,无需进行额外的定义
    发表于 08-16 16:12 476次阅读

    C语言中指针函数函数指针的概念及应用示例

    C语言中,指针函数函数指针是强大且常用的工具。它们允许我们以更灵活的方式处理函数和数据,进而扩展程序的功能。
    发表于 08-16 16:14 888次阅读

    C语言中函数的基本知识

    函数C语言中的基本构建块之一,它允许我们将代码组织成可重用、模块化的单元。
    发表于 08-16 18:25 542次阅读

    C语言中定义的应用

    C语言中,宏定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。
    发表于 08-17 15:33 822次阅读

    C语言中定义的使用技巧

    #define命令是C语言中的一定义命令,它用来将一标识符定义为一
    发表于 09-05 10:12 1176次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>宏<b class='flag-5'>定义</b>的使用技巧

    C语言中的宏是什么

    第五章 性能优化5.1 使用宏定义  在C语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。  写一
    发表于 12-15 08:20

    C语言中怎么定义不定长度的数组?

    C语言中怎么定义不定长度的数组
    发表于 10-09 07:40

    c语言函数指针定义,指针函数函数指针的区别

     往往,我们一提到指针函数函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针,指针
    发表于 11-16 15:18 3625次阅读

    C语言中函数的创建以及使用

    下面我们来介绍一下 C 语言中非常重要的概念 - 函数 (function)。首先就要先给函数下一
    的头像 发表于 07-06 09:38 5758次阅读

    C语言-函数定义、声明、传参

    C语言函数是非常重要的知识点,一完整的C语言程序就是由主
    的头像 发表于 08-14 09:57 1944次阅读

    C语言中的宏定义

    #define命令是C语言中的一定义命令,它用来将一标识符定义为一
    的头像 发表于 09-28 16:05 3458次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>的宏<b class='flag-5'>定义</b>

    C语言中什么是关系运算符

    C语言中,比较符称为关系运算符,所谓关系运算就是比较运算,将两个数值进行比较,判断其比较的结果是否符合的的条件。
    的头像 发表于 03-09 10:47 2438次阅读

    c语言max函数在哪个库

    C语言的max函数并不属于标准C库,它通常是由程序员自己编写的一定义。max
    的头像 发表于 11-22 10:18 3501次阅读

    c语言中数组怎么定义

    C语言中,数组是一种用来存储相同类型元素的数据结构。它可以存储多个元素,并通过一共同的名称来引用这些元素。数组是一种很重要的数据结构,可以用于解决很多实际的问题。 在C
    的头像 发表于 11-24 10:11 3076次阅读

    C语言中的socket编程基础

    数据 步骤6:关闭socket 创建socket 在C语言中,创建socket需要使用socket()函数。这个函数需要两个参数:域
    的头像 发表于 11-01 16:51 311次阅读