V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  C

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

  •  
  •   tctc4869 · 2021-04-09 08:51:09 +08:00 · 1541 次点击
    这是一个创建于 1361 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    13 条回复    2021-04-09 10:24:33 +08:00
    OliverDD
        1
    OliverDD  
       2021-04-09 08:59:38 +08:00
    include 不同头文件?
    codehz
        2
    codehz  
       2021-04-09 08:59:40 +08:00 via Android
    原则上就会冲突的,如果不能改源码,那就 objcopy 的时候改掉。。。
    所以你现在知道为什么 c++要做名字粉碎了吗
    tctc4869
        3
    tctc4869  
    OP
       2021-04-09 09:05:33 +08:00
    @OliverDD 头文件方式的话,两个 c 文件的相同函数名编译时,会爆出冲突错误把?
    raysonx
        4
    raysonx  
       2021-04-09 09:09:33 +08:00 via iPad
    不能,会出现链接错误。
    有一种迂回的办法是链接到不同的动态库里去,再用 dlopen 或者 LoadLibrary 动态调用。
    anytk
        5
    anytk  
       2021-04-09 09:09:36 +08:00
    c 文件同名函数都标注 static, 声明结构体成员包含函数指针指向函数,然后定义结构体常量暴露接口,main 函数再用结构体指针来引用不同的结构体就行了。
    Mithril
        6
    Mithril  
       2021-04-09 09:10:00 +08:00 via iPhone
    再弄俩文件包成不同名字的导出函数,封到俩动态库里就行了。
    ch2
        7
    ch2  
       2021-04-09 09:12:57 +08:00 via iPhone   ❤️ 1
    C++的 namespace 就是干这个用的
    iceheart
        8
    iceheart  
       2021-04-09 09:25:54 +08:00 via Android
    C 里不能这么搞,得换方案实现你的需求
    tctc4869
        9
    tctc4869  
    OP
       2021-04-09 09:28:10 +08:00
    @iceheart 模块分工的问题
    tctc4869
        10
    tctc4869  
    OP
       2021-04-09 09:30:11 +08:00
    @iceheart 其他的方案有哪些?
    yolee599
        11
    yolee599  
       2021-04-09 09:37:52 +08:00
    c 语言不能有两个相同名字的函数,即使参数不同,文件不同,也不行,编译直接报错。你用 static 限定只能在当前文件使用就是可以的
    zbianbiaos
        12
    zbianbiaos  
       2021-04-09 09:42:33 +08:00
    结构体封函数指针
    typedef struct
    {
    void (*func1)(void);
    void (*func2)(const char *, int);
    ......
    } funcs_export_t;
    adinxu
        13
    adinxu  
       2021-04-09 10:24:33 +08:00
    我个人的感觉是,每个语言都有其擅长的事情,去做不擅长的事情那就是事倍功半了,,,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1181 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:15 · PVG 02:15 · LAX 10:15 · JFK 13:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.