C语言中同名源文件问题

比如,C语言中的dir1和dir2分别有同名的a.c和a.h文件(会包含同名的函数),那么在其他目录下的b.c中包含a.h文件,并且调用a.c的同名函数,那么编译器是怎么识别是调用dir1还是dir2目录下a.c的同名函数?(排除再b.c中包含绝对路径与相对路径头文件)

这是属于自定义函数和函数头
.c文件是由工程管理系统加入的,加入的时候要选择是哪个路径中的.c,这个不会混淆
.h文件由于事自定义的头,因此不用尖括号引用,一般用双引号;自定义头文件路径可以在工程设置中修改,也可以这样写(假定自定义头文件目录为c:\dir0,实际源文件目录为c:\dir0\dir1和c:\dir0\dir2):#include "dir1\a.h" 也可以写绝对路径 #include "c:\dir0\dir1\a.h"
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-15
首先,头文件的查找规则是:
如果使用尖括号<>包裹文件名,那么直接查找标准路径,找不到则报错;
如果使用双引号""包裹文件名,那么先查找当前路径,找不到再查找标准路径,仍找不到则报错。
根据这个规则,可以确定编译器包含的是哪个头文件。
其次,头文件中含有的只是函数声明,编译生成的.o中间文件中只含有指向函数入口的符号,需要和含有函数实现的中间文件连接起来才能生成最终的可执行文件。和不同版本的中间文件连接,最终的函数实现也就不同。