MS Visual C ++:您何时应该关注使用调用约定?

时间:2011-01-24 18:55:48

标签: c++ c calling-convention

在C / C ++中(具体来说,我正在使用MSVS),在什么情况下需要担心为函数定义指定调用约定?它们是否重要?是否有能力在必要时选择最佳惯例(即fastcall等)。

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

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:6)

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

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

  • 您与第三方库进行交互,并且这些库的标头未声明正确的调用约定。
  • 您正在为其他人创建一个库或DLL。您需要决定调用约定,以便其他代码在调用代码时使用正确的调用约定。