最近有位哥问我,如何给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_shxt和code_fxck就是同一个地址了,怎样?
他还要杠,用字段来限制,好像不是很自由,而且不同环境用的链接脚本ld格式还不一样……
我X,要逼我出大招么,靠,老子今天就跟你杠到底!
// code.c
void code_fxck(inttimes)
{
//balabala...
}
voidcode_shxt(inttimes)__attribute__((alias("code_fxck")));
这行吗?!
他心里没底,有点不相信,放低了声调说,这……行吗?就算可以……那么如果编译器不支持这个__attribute__呢?审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7533浏览量
128769
原文标题:C语言一个函数能不能有两个名字?
文章出处:【微信号:embedded_sw,微信公众号:嵌入式软件实战派】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
C语言中宏定义的使用技巧
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
发表于 09-05 10:12
•500次阅读
LABVIEW中可以向C语言中定义局部静态变量static吗?
的解析,然后得到一个值代入公式节点的输入计算,然后下次再进行计算的话要加上上次计算的值,而不是重新计算。所以希望向C 语言中的静态局部变量一样,下次进入这个函数,值是不变的,只是初始化
发表于 03-22 09:38
【每日一知识点】C语言中const详解
马上就想到了常量。事实上在C语言中const功能很强大,它可以修饰变量、数组、指针、函数参数等。1、 修饰变量:C语言中采用const修饰变
发表于 03-29 10:53
C语言中的宏是什么
第五章 性能优化5.1 使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。 写一
发表于 12-15 08:20
C语言中函数的创建以及使用
下面我们来介绍一下 C 语言中一个非常重要的概念 - 函数 (function)。首先就要先给函数下一个定义,函数就是完成特定任务的独立代码
评论