定义调用约定的意义何在?

Sir*_*lot 1 c++

例如:

int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show )
Run Code Online (Sandbox Code Playgroud)

WINAPI 是一个如下所示的定义:

#define WINAPI      __stdcall
Run Code Online (Sandbox Code Playgroud)

你为什么不能这样做:

int __stdcall WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show )
Run Code Online (Sandbox Code Playgroud)

实际上我认为我的问题是我有点混淆了 typedef 的定义。谁可以给我解释一下这个?该定义的作用是什么?为什么不能在其位置编写 __stdcall ?

Jam*_*lin 5

因为WINAPI调用约定不保证__stdcall. WINAPI即使不正确,使用的代码仍然是正确的。

可以像后面的示例中那样编写该函数,并且它可以正常工作 - 这只是不是一个好的实践,并且无法移植到调用约定是其他内容的平台。