LINUX.ORG.RU

То же про искажение имен

 


0

1

Меня пригласил в свои темы один местный товарищ и там я наткнулся на искажение имен. С++ никогда не изучал только немного СИ но мне стало интересно. Скажите в чем разница?

_z2JJPi_S 
_z2JPiS_
_z2JJPi_S0
_z2JJPi_S1
Понял что JJ -имя. i-тип параметра фукции. P-указатель. Непонятны
_S
S_
_S0
_S1
Понимаю что это замены. Но можно напримере? В чем отличие _S и S_?. Что говорит тут нижнее подчеркивание перед S и после S?

Ответ на: комментарий от CrazyAlex25

Ну вот вы как люди пишущие компиляторы что можете сказать? Это я перефразировал того кто помог мне задаться вопросом об искажении. Оно бы мне сотню лет ненужно но теперь вот задался и стало любопытно. Логика то какая? Нижнее подчеркивание перед и за символом о чем говорит?

Stierlitz_
() автор топика

А чтобы самостоятельно не почитать про манглинг имён, доверяешь только Лору?

anonymous
()
Ответ на: комментарий от SZT

Мои догадки это всего лишь догадки. Мне вот интересно знать точно что значит нижнее подчеркивание перед S и после S. У кого же спросить как не у отцов компилятора?

Stierlitz_
() автор топика
Ответ на: комментарий от Stierlitz_

Мне вот интересно знать точно что значит нижнее подчеркивание перед S и после S.

Это от компилятора зависит.

SZT ★★★★★
()

Это что за компилятор такое генерирует. Я везде в символах видел только подобное:

_Z4FuncEPi - обычная функция
_ZN3Foo3BarE - переменная неймспейса или класса/структуры Foo
_ZN3FooC2Ev - конструктор Foo без аргументов
_ZN3FooD2Ev - деструктор Foo

Никаких _S, S_ и маленьких _z в начале

SR_team ★★★★★
()
Ответ на: комментарий от SZT

Это от компилятора зависит.

Но практически все современные компиляторы используют Itanium C++ ABI, в котором правила манглинга вполне однозначены.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от annulen

Но практически все современные компиляторы используют Itanium C++ ABI, в котором правила манглинга вполне однозначены.

Любые правила манглинга вполне однозначны.

Меня всегда радует когда «все» это означает единственный g++ :)

Все остальные используют, то что используется в системе.

Из 4 живых компиляторов С++, только g++ не осилил https://en.wikiversity.org/wiki/Visual_C%2B%2B_name_mangling

«On Microsoft Windows, the Intel compiler[4] and Clang[5] uses the Visual C++ name mangling for compatibility.»

Поэтому код Visual C++, Intel и Clang легко линкуется вместе…

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Ну ты это, не гони на gcc… Разгоняет он тут, выкормыш мелкомягкий :3

anonymous
()
Ответ на: комментарий от fsb4000

Меня всегда радует когда «все» это означает единственный g++ :)

А меня радует, когда в рассуждениях про C++ ABI единственной платформой считают Windows/x86. Возьми любую другую архитектуру или ОС, и стандартом де-факто почти везде будет Itanium ABI, даже там, где gcc не является системным компилятором

annulen ★★★★★
()
Ответ на: комментарий от annulen

Возьми любую другую архитектуру или ОС, и стандартом де-факто почти везде будет Itanium ABI, даже там, где gcc не является системным компилятором

У IAR свой стандарт

monk ★★★★★
()
Ответ на: комментарий от monk

Интересно, почему они так поступили. Я вангую, что либо они начали свой тулчейн продавать раньше 2000 года и потом не хотели нарушать бинарную совместимость со старыми версиями (хотя кому она нахрен сдалась в embedded-системах), либо они как-то хитро экономят байты

annulen ★★★★★
()
Ответ на: комментарий от annulen

не хотели нарушать бинарную совместимость со старыми версиями (хотя кому она нахрен сдалась в embedded-системах)

А кому нужна бинарная совместимость с чужими компиляторами в эмбед-системах?

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Никому не нужна, но одного манглинга для бинарной совместимости как бы мало, так что это не имеет отношения к предмету обсуждения

annulen ★★★★★
()

hobbit чо там у него? Штэрлиц писать не может

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.