gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:23:20 26 4
gpt4 key购买 nike

根据我的理解,name mangling是在函数重载时使用的,可以区分同名函数。

但我注意到名称修改也用于 WinMain() 函数(未重载)。名称修改后,它变为 _WinMain@16

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


这是我使用的代码:

#include <windows.h>

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

return 0;
}

最佳答案

这不是通常所说的名称修改。 Name mangling 是为了让 C++ 从同名的函数中创建不同的符号名称(不幸的是,它是实现定义的)。这里有一个简单的 "decorated name"按照 win32 ABI 的约定。 Windows 使用它们来区分该平台上可用的不同调用约定。

在这种情况下,单个@ 表示stdcall 调用约定,后面的数字是参数列表中的字节数。 WINAPI 宏扩展为一些特定于编译器的属性,这些属性选择 stdcall 作为调用约定。

不同的 ABI 使用不同的名称修饰。例如。在 Linux 上,您的标准调用约定是 cdecl 并且它根本不使用任何装饰。但是您可以拥有包含符号版本的装饰(巧合的是在 @ 符号之后)

关于c - 为什么名称修饰与 WinMain() 函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44950354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com