c++ - 为什么 C++ 函数的命名标准不存在?

标签 c++ visual-studio visual-c++

我为 AutoCAD 编写插件。如果我编写托管(即 .net)插件,那么我可以使用任何可以与 AutoCAD 使用的 .NET Framework 版本一起工作的 Visual Studio 版本(这非常方便):

  • AutoCAD 2009 可以使用.NET 3.0、3.5
  • AutoCAD 2010 可以使用 .NET 3.5。
  • ...
  • AutoCAD 2016 可以使用 .NET 4.5、4.5.1

因此,通过 Visual Studio 2013,我可以为 AutoCAD 2009-2016 编写 .net 插件。

但有时我需要为 AutoCAD 编写非托管插件,因为它的托管 .net API 未完全涵盖非托管 API (ObjectARX SDK)。 ObjectARX 是 C++ 的 API。在这种情况下,我不能为每个 AutoCAD 版本使用相同的 Visual Studio。比如我要用VS 2005来编写AutoCAD 2009的插件。因此我在我的虚拟机上安装了 VS 2005-2013。在我看来这是非常不方便的。

我知道,这个问题存在是因为 C++ 函数命名标准不存在,每个版本的 VS 都有自己的名称生成规则,用于未标记为 external "C"

但为什么这个标准还不存在呢?这是什么原因呢?我相信这个原因是存在的。这种行为不方便不仅对我有用(我问过其他程序员)。但是他们不知道为什么每个新的VS版本都有自己的C++函数命名规则,为什么没有C++函数命名标准。

谢谢。

最佳答案

确实存在标准,请参阅 https://mentorembedded.github.io/cxx-abi/abi.html#mangling

但并不是所有的编译器都使用它,因为它们有自己的已经使用多年的 mangling 约定,并且出于各种原因不想更改它们。

在您的情况下,不同版本的 Visual Studio 之间的差异不仅仅是名称修改,C++ 运行时库和标准库也有变化。

关于c++ - 为什么 C++ 函数的命名标准不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30480653/

相关文章:

c++ - Qt5.5 为什么不显示错误信息?

c# - 以编程方式从 XML 模式生成测试 XML

asp.net - 在 Visual Studio 2008 中调试 ASP.NET Web 服务、C++/CLI DLL 和 native DLL

visual-c++ - 新安装的 Visual Studio 2012 缺少头文件

visual-c++ - 使用 MSVC 2013 进行静态变量初始化时崩溃

c++ - ZeroMq:打开的文件太多。同一对象上的 fd 使用量持续增长

c++ - if-cases 泄漏中定义的变量? (也就是为什么这甚至可以编译?)

c++ - 无法理解 C++ 中列表的实现

c# - 在文件夹 View 中,visual studio 2017 中的项目属性在哪里?

delphi - OMF格式转COFF格式