在C/ c++中,当两个函数具有相同的名称,一个函数调用另一个函数时,它将工作

in C/C++, it is going to work when two function has same name, one end up call another

本文关键字:函数 工作 一个 另一个 函数调用 c++ 两个      更新时间:2023-10-16

我遇到了这个问题,函数F需要调用函数A,而函数A调用了一个恰好与F同名的第三方函数

的例子:

    sendData()
    {
      ...
        socket(p1, p2, p3) // intention is to call version 1 
    }

    socket(p, p2, p3)     // this is version 1
    {
      ...
       xScoket(...);
       ...
    }
    xSocket(...)          // in separate file
   {
      ...
      socket(p1, p2, p3);  // intention is to call version 2 
                           // from third party
     }
    socket(...)    // this is version 2 from third party in separate file
   {
      ...
    }

我考虑过使用名称空间,但后来它认为名称空间用于定义两个版本的函数,而不是一个调用另一个。我说的对吗?

我考虑使用#define如下版本1,并希望预处理器将替换版本1套接字与socketUnique,以避免编译器/链接器抱怨重复的错误。但是当我运行测试时,它不起作用——调试毫无意义地跳转。所以,我又想了一下,#define也可以替换版本2(来自第三方代码)。

     #define socket socketUnique

所以,我把这个问题贴在这里,希望听到一些建议——要么是可行的,要么是不可能的。

谢谢

如果函数位于单独的文件中(并且不需要从其他源文件中调用),那么最简单的解决方案是使函数static至少位于两个位置中的一个。

如果你需要从多个源文件中调用函数(因此static不起作用),我会重命名"你的"函数(s),而不是依赖宏-使用宏会使代码很难阅读,它肯定会对任何"源导航工具"(cscope等)造成破坏