为什么名称修改与WinMain()函数一起使用?

Ste*_*eve 4 c winapi name-mangling

根据我的理解,当存在函数重载时使用名称修改,以便可以区分具有相同名称的函数.

但我注意到名称修改也与WinMain()函数一起使用(没有重载).名称变形之后就变成了_WinMain@16.

那么为什么名称修改与WinMain()函数一起使用?


这是我使用的代码:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 7

这不是通常所说的名称修改.名称修改用于C++从同名函数创建可分辨符号名称(不幸的是实现定义).这里有一个简单的"装饰名称",符合win32 ABI的惯例.Windows使用它们来区分该平台上可用的不同调用约定.

在这种情况下,single @表示stdcall调用约定,后面的数字是参数列表中的字节数.该WINAPI宏扩展到选择一些特定的编译器属性stdcall的调用约定.

不同的ABI使用不同的名称装饰.例如,在Linux上,您的标准调用约定是cdecl,它根本不使用任何装饰.但你可以有装饰符号版本(巧合地在@符号后面)