[英]Why is name mangling used with the WinMain() function?
根據我的理解,當存在函數重載時使用名稱修改,以便可以區分具有相同名稱的函數。
但我注意到名稱修改也與WinMain()
函數一起使用(沒有重載)。 名稱_WinMain@16
后,它變成_WinMain@16
。
那么為什么名稱修改與WinMain()
函數一起使用?
這是我使用的代碼:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
return 0;
}
這不是通常所說的名稱修改 。 名稱修改用於C ++從同名函數創建可分辨符號名稱(不幸的是實現定義)。 這里有一個簡單的“裝飾名稱” ,符合win32 ABI的慣例。 Windows使用它們來區分該平台上可用的不同調用約定。
在這種情況下,單個@
表示stdcall
調用約定,后面的數字是參數列表中的字節數。 WINAPI
宏擴展為某些特定於編譯器的屬性,該屬性選擇stdcall
作為調用約定。
不同的ABI使用不同的名稱裝飾。 例如,在Linux上,您的標准調用約定是cdecl
,它根本不使用任何裝飾。 但你可以有包含符號版本的裝飾(巧合地在@
符號后面)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.