tctc4869
V2EX  ›  C

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

  •  
  •   tctc4869 · Apr 9, 2021 · 2724 views
    This topic created in 2042 days ago, the information mentioned may be changed or developed.

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

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

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