私の理解に基づいて、名前のマングリングは関数のオーバーロードがあるときに使用されるので、同じ名前の関数を区別することができます。WinMain()関数で名前マングリングを使用するのはなぜですか?
しかし、私は名前のマングリングもWinMain()
関数(オーバーロードされていない)で使用されていることに気付きました。名前マングリングの後、それは[email protected]
になります。
なぜ、WinMain()
機能で名前のマングリングが使用されるのですか?
これは私が使用するコードです:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
return 0;
}
コンパイラが実際に 'WinMain'シンボルをmangleした場合、表示されるものとはまったく異なるものになります。あなたが見ているのは、 'WinMain'シンボルの*特別扱い*を持つコンパイラです。 –
私は '_WinMain @ 16'はmingw/gccコンパイラが使う内部名だと思います。 16とはどういう意味ですか、私には分かりません。 – Lundin
'@ 'は' stdcall'呼び出し規約を意味し、 '16'はパラメータリストのサイズです(ここでは4バイトの4バイト引数です)。他の呼び出し規約を使用する関数は、異なる方法で装飾されています。 –