Насколько я понимаю, изменение имен используется при перегрузке функций, чтобы можно было различить функции с одинаковыми именами.
Но я заметил, что изменение имени также используется с функцией WinMain()
(которая не перегружена). После изменения имени он становится _WinMain@16
.
Итак, почему изменение имени используется с функцией WinMain()
?
Это код, который я использовал:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
return 0;
}
WinMain
, это было бы совсем не так, как вы видите. Вы видите, что компилятор имеет особую обработку символаWinMain
. - person Some programmer dude   schedule 06.07.2017_WinMain@16
- это какое-то внутреннее имя, используемое компилятором mingw / gcc. Что должно означать 16, я понятия не имею. - person Lundin   schedule 06.07.2017@
означаетstdcall
соглашение о вызовах,16
- это размер списка параметров (здесь: 4 раза 4-байтовый аргумент). Функции, использующие другие соглашения о вызовах, оформлены по-другому. - person   schedule 06.07.20174_WinMain@16
или_WinMain@20
или что-то в этом роде? И это определяется ABI или Mingw? - person Lundin   schedule 06.07.2017cdecl
, вам вообще не нужна информация о размере списка аргументов, и я недостаточно глубоко разбираюсь в различных соглашениях о вызовах, доступных в Windows, но, похоже, компоновщикам нужно знать только размер аргументов дляstdcall
...;) - person   schedule 06.07.2017foo
, должен будет использовать какой-то способ изменения имен - в значительной степени определяемый реализацией. - person Lundin   schedule 06.07.2017x.1276
иx.1279
для двухstatic int x;
, определенных в разных областях. Компиляторы могут делать что угодно для именования этих символов. - person   schedule 06.07.2017