【问题标题】:Why the standard of naming of C++ functions is not exist?为什么没有 C++ 函数的命名标准?
【发布时间】:2015-05-27 11:04:42
【问题描述】:

我为 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++函数的命名标准。

谢谢。

【问题讨论】:

  • 这可能是因为它链接到不同版本的运行时。
  • 准确地说:通过对不同的、不兼容的库使用不同的名称修饰,您会提前失败(程序不会启动)而不是延迟失败(程序可能会在过程中损坏数据)。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-13
    • 2020-06-28
    • 2014-06-28
    • 2011-09-14
    • 2011-10-05
    • 2023-03-06
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多