簡體   English   中英

為什么名稱修改與WinMain()函數一起使用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM