C++ 在C/C++;,当两个函数具有相同的名称,一个函数最终调用另一个函数时,它将起作用

C++ 在C/C++;,当两个函数具有相同的名称,一个函数最终调用另一个函数时,它将起作用,c++,c,C++,C,我遇到了这个问题,函数F需要调用函数A,而函数A需要从第三方调用函数,而第三方恰好与F同名 例如: sendData() { ... socket(p1, p2, p3) // intention is to call version 1 } socket(p, p2, p3) // this is version 1 { ... xScoket(...); ...

我遇到了这个问题,函数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
   {
      ...
    }
我曾考虑过使用名称空间,但后来它认为名称空间用于定义两个版本的函数,而不是一个调用另一个版本的函数。我说得对吗

我考虑在版本1中使用#define as following,并希望预处理器将版本1套接字替换为socketUnique,以避免编译器/链接器抱怨重复错误。但是当我运行一个测试时,它不工作——调试毫无意义地跳转。因此,我再次思考,define也可以取代版本2(来自第三方代码)

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


谢谢

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


如果您需要从多个源文件调用该函数(因此
static
不起作用),我将重命名“your”函数,而不是依赖宏-使用宏将使代码非常难以阅读,并且肯定会对任何“源导航工具”(cscope等)造成严重破坏。

C没有名称空间。请明确你希望得到哪种语言的答案。如果第三方位于静态/共享库或DLL中,则会有所不同。你需要更具体一些。2.你最好在代码< >代码> >包含3RDPAR.H./Cord>之后,将“<代码>定义”套接字Socket唯一的< /代码>,但是你的宏没有改变已经编译的代码。Downvote,因为你没有指定哪种语言,即使答案对于C和C++来说将是非常不同的。不要浪费时间,告诉我们你用什么语言。很抱歉,我没有说清楚-这是我第一次使用这个网站。。我正在使用C/C++代码进行一个嵌入式项目。我正在写的代码是C语言。根据问题,其中一个函数调用另一个同名函数。在C++中,如果函数有不同的“签名”,将不工作。抱歉,我没有说清楚这是我第一次使用这个网站。我正在使用C/C++代码进行一个嵌入式项目。我正在写的代码是C。。。所有功能都必须被其他人看到。-作为第三方功能(供应商提供的版本2),xSocket由另一个组实现,供我使用。我正在编写的函数(版本1)必须是公共的,因为它将被其他应用程序使用。我不得不说,整个事情都是疯狂的-太多的层,但这是为我设置的策略,我不能重命名我正在实现的功能。。。。
     #define socket socketUnique