调用转换与命名转换

调用转换与命名转换
“调用转换”(calling conversion)和“命名转换”(naming conversion)这两个概念对我们来说其实并不陌生,只要你听说过extern "C",__cdecl,__stdcall和__fastcall这些东西,如果引用的声明和导出的声明不一致,就会出现类似下面这么一个编译错误:

RealTest.obj : error LNK2001: unresolved external symbol "double __stdcall Fun1(int,double)" (?Fun1@@YGNHN@Z)
Debug/RealTest.exe : fatal error LNK1120: 1 unresolved externals

解决这个问题很简单,只要使用一致的声明就可以了。我们用C++编程,常接触到的也就两种命名转换,一种是C++的,不需要特别声明,一种是C的,需要加上个extern "C"前缀;而调用转换有三种,__cdecl,__stdcall和__fastcall,调用转换不同,导出的符号也是有差别的。这里我就不深究它们的差别了,我们所要记住的就是:保持一致。

你可能感兴趣的:(调用转换与命名转换)