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

最近有位哥问我,如何给c语言中的函数定义两个不同的名字?就是这两个名字都是指向同一个函数,同一个地址,而且两个名字都可以当做函数来用的那种。 我想都没想说,宏定义可以么? 他摇摇头,说不是这种。 我接着说,指针可以么? 他还是摇头…… 他看我有点不耐烦,接着说,用宏定义总是觉得是伪造的函数,宏函数也终究不是函数,有些场合也替代不了函数。例如:// code.cvoid code_fxck(int times){  // balabala...}// code_gen.h#define code_shxt code_fxckextern void code_shxt(int times); 上面的代码,code_gen.h如果是工具软件生成的,很可能就没有#define code_shxt code_fxck这个定义,就会出现编译出错。 他继续说,用函数指针吧,他们本身的地址是不一样的,即指针的地址和函数的地址不是同一个。例如:// code.cvoid code_fxck(int times){  // balabala...}const // code_run.cconst void (*code_shxt)(int) =  code_fxck; &code_fxck和&code_shxt是不一样的。 我说,那定义两个功能一样的函数吧。// code.cvoid code_fxck(int times){  // balabala...}void code_shxt(int times){ // balabala...} 他说这两个函数不在同一个地址空间,而且增加代码量了,万一这是一个超大的函数呢…… 我发现他发挥他的专长——杠起来了! 我心想,尼玛,我就不信治不了你了! 那就用汇编吧/* code.asm */ .thumb .thumb_func.globl code_fxck.globl code_shxtcode_shxt:code_fxck:  /* balabala...*/ 他说,汇编太麻烦了,写起来效率很低…… 我再出一招,用链接符号吧// code.cvoid __attribute__((section (.your_fxxk_code))) code_fxck(int times){  // balabala...}/* fxxk_proj.ld *//* ... */.your_fxx_code : align(1024){    _code_shxt = absolute(.);    keep(*(*.your_fxxk_code))} > flashcode_shxt  = _code_shxt; 我继续解释着,这里的code_shxt和code_fxck就是同一个地址了,怎样? 他还要杠,用字段来限制,好像不是很自由,而且不同环境用的链接脚本ld格式还不一样…… 我x,要逼我出大招么,靠,老子今天就跟你杠到底!// code.cvoid code_fxck(int times){  // balabala...}void code_shxt(int times) __attribute__((alias(code_fxck))); 这行吗?! 他心里没底,有点不相信,放低了声调说,这……行吗?就算可以……那么如果编译器不支持这个__attribute__呢?


AI开始能读懂情绪,并对相应指令做出回应了
MAX14895E典型应用电路图
数据中心是机房吗?它有什么作用?
如何实现多个Wi-Fi网络的无缝连接
微雪电子5寸树莓派显示屏 5inch HDMI LCD简介
如何给C语言中的函数定义两个不同的名字?
二极管有什么用,如何连接电路中的二极管
随着我国经济发展和互联网技术的快速进步 智能家居逐步走向居民生活
路灯集中控制系统
继LG化学之后,SKI也在考虑分拆旗下的动力电池业务
华为云业务取得的成果介绍
LED装饰照明控制系统的设计
降压升压型控制器LT8390A和LT8391A可在紧凑空间调节高功率电压和电流
RFID工业读卡器AGV自动化运输解决方案的详细介绍
串行链路后仿真操作步骤
华为发行20亿美元债券 扩大智能手机业务
谷歌本月注册两款送货无人机用于在美测试
关于嵌入式系统以及嵌入式平台下的学科分工详解
马斯克的脑机接口公司Neuralink官宣:首次人体临床试验获FDA批准
想在“互联网信息高速公路”顺畅通行,华为云CDN来助力