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

时间:2015-05-27 11:04:42

标签: 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 ++函数的命名标准不存在。

谢谢。

1 个答案:

答案 0 :(得分:11)

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

但并非所有的编译器都使用它,因为他们有自己多年使用的修改惯例,并且他们不想因各种原因改变它们。

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