C语言中的函数重名问题和解决方法

什么是函数重名问题?

在实际工作中,一个产品的代码是很复杂的,不可能由一个人全部编写,由此就得分成多个模块,每个人只负责其中一个模块的代码编写。模块之间先定义好通信的协议,也就是交互的函数接口。程序员只需要根据协议去实现具体的函数功能,通信协议只是规定了逻辑上的功能,具体的实现是程序员完成,且编写各个模块代码的程序员之间都互相不清楚对方是如何实现的。这种情况下就可能存在函数重名问题,也就是两个库之间有函数的名字一样,链接的时候编译器不知道该链接哪一份代码,会报重复定义的错误。

为什么不能重名?

在C语言中是不能重名的,但是在C++中是可以重名的,C++有函数重载机制,可以解决掉函数重名问题。这里以C语言的角度来讨论。程序最终都是要在内存中运行的,由于虚拟地址的映射功能,每个进程都认为自己独享整个内存,在链接的时候会根据链接脚本来链接程序。每个函数都会存放在一段内存中,而函数名就是函数指针,指向存放函数的内存首地址。如果有两个函数重名,那就会有两块内存分别存放了两个函数的代码,但是他们都共用一个函数名,即一个函数名要映射到两个地址,这是不允许的。可以有多个指针指向同一个地址,但是不能允许一个指针变量指向多个地址。

避免函数重名的方法:

1.在源文件中,不对外提供的函数,定义时都用static修饰,将该函数的链接属性限定在本文件;
2.函数命名时,在每个函数的名字前都加上库的名称,一般库的名字是唯一且不重合的;
3.全局变量如果只在本文件中使用,最好也使用static修饰;

推荐

给大家推荐一款嵌入式工程师的学习神器,里面包含C语言、linux、操作系统等嵌入式工程师必备的知识点,不仅可以学习知识点还有配套的练习题、大厂面试题。博主在入门嵌入式行业时也是在这个平台学习,如果你是想入门嵌入式或者是找工作,都强烈推荐你使用这个网站。
《学习神器点这里》
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值