一个函数方法里如何调用两个 c 文件里的相同标识符的函数?

2021-04-09 08:51:09 +08:00
 tctc4869

初涉 c 语言,想要一些面向对象的编写代码的体验。不让 c 语言工程模块分工的处理更麻烦

最简单的,已知有两个 c 文件,两个 c 文件里有相同标识符名称的函数,在 main 函数调用该两个 c 文件里的相同标识符的函数,不改变两个 c 文件该相同标识符函数的名称的情况下,有什么方法可以做到?

1519 次点击
所在节点    C
13 条回复
OliverDD
2021-04-09 08:59:38 +08:00
include 不同头文件?
codehz
2021-04-09 08:59:40 +08:00
原则上就会冲突的,如果不能改源码,那就 objcopy 的时候改掉。。。
所以你现在知道为什么 c++要做名字粉碎了吗
tctc4869
2021-04-09 09:05:33 +08:00
@OliverDD 头文件方式的话,两个 c 文件的相同函数名编译时,会爆出冲突错误把?
raysonx
2021-04-09 09:09:33 +08:00
不能,会出现链接错误。
有一种迂回的办法是链接到不同的动态库里去,再用 dlopen 或者 LoadLibrary 动态调用。
anytk
2021-04-09 09:09:36 +08:00
c 文件同名函数都标注 static, 声明结构体成员包含函数指针指向函数,然后定义结构体常量暴露接口,main 函数再用结构体指针来引用不同的结构体就行了。
Mithril
2021-04-09 09:10:00 +08:00
再弄俩文件包成不同名字的导出函数,封到俩动态库里就行了。
ch2
2021-04-09 09:12:57 +08:00
C++的 namespace 就是干这个用的
iceheart
2021-04-09 09:25:54 +08:00
C 里不能这么搞,得换方案实现你的需求
tctc4869
2021-04-09 09:28:10 +08:00
@iceheart 模块分工的问题
tctc4869
2021-04-09 09:30:11 +08:00
@iceheart 其他的方案有哪些?
yolee599
2021-04-09 09:37:52 +08:00
c 语言不能有两个相同名字的函数,即使参数不同,文件不同,也不行,编译直接报错。你用 static 限定只能在当前文件使用就是可以的
zbianbiaos
2021-04-09 09:42:33 +08:00
结构体封函数指针
typedef struct
{
void (*func1)(void);
void (*func2)(const char *, int);
......
} funcs_export_t;
adinxu
2021-04-09 10:24:33 +08:00
我个人的感觉是,每个语言都有其擅长的事情,去做不擅长的事情那就是事倍功半了,,,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/769277

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX