Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Что означает @ после имени функции в C++?

#c++ #windows


Например, функция WinMain@16. Что означает "собака" и число после нее? У меня есть
идея, что это общий размер параметров в байтах, но я не уверен в этом.
    


Ответы

Ответ 1



В си перегружать функции нельзя, поэтому, когда код компилируется, компилятор может использовать имена функций по назначению. В с++ можно перегружать функции, а в скомпилированном коде уже нет данных о аргументах. Поэтому, компилятор делает "манглирование". В данном случае просто кодирует размер аргументов и добавляет их таким образом. Это позволяет потом линковщику все собрать правильно в исполнимый файл. Чуточку больше.

Ответ 2



Это вовсе не имя функции. Это компиляторозависимый name mangling — имя дополняется другой информацией для внутренних целей. Смысла вне конкретного компилятора и его конкретной версии не имеет. Реальное имя функции — WinMain. Если вы пытаетесь скомпилировать под Windows что-нибудь нестандартным компилятором, возможно, вам нужно почитать этот ответ. Поскольку известно, что WinMain использует конвенцию вызова __stdcall, то согласно официальной документации правильное имя должно быть _WinMain@16 (спасибо @Abyx за уточнение).

Комментариев нет:

Отправить комментарий