8

在 C/C++ 中(具体来说,我使用的是 MSVS),在什么情况下需要担心为函数定义指定调用约定?它们曾经很重要吗?是否有必要在必要时选择最佳约定(即快速调用等)。

也许我的理解不足,但我只是不知道他们什么时候会是程序员需要关心诸如参数放在堆栈上的顺序之类的事情。我也不明白为什么编译器的优化无法选择最适合该特定功能的方案。任何人都可以提供给我的任何知识都会很棒。谢谢!

4

2 回答 2

10

一般来说,当您集成由不同编译器编译的代码时,调用约定很重要。例如,如果您要发布一个供您的客户使用的 DLL,您需要确保您导出的所有函数都具有一致的、预期的调用约定。

您是正确的,在单个程序中,编译器通常可以选择为每个函数使用的调用约定(并且规则通常非常简单)。

于 2011-01-24T19:00:25.633 回答
6

您不需要关心 64 位应用程序,因为只有一种调用约定。

在以下情况下,您确实需要注意 32 位应用程序:

  • 您与 3rd 方库进行交互,并且这些库的标头未声明正确的调用约定。
  • 您正在创建一个库或 DLL 供其他人使用。您需要确定调用约定,以便其他代码在调用您的代码时使用正确的调用约定。
于 2011-01-24T19:00:23.807 回答