|
|
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
v6yЭто точно стандарт? Ссылку можно? (Вопрос для меня непринципиальный, поэтому самому искать ответ лень) Может быть это не стандарт, а типа соглашения компиляторов под Вин? Потому как под Линуксом по умолчанию никаких подчеркиваний впереди не добавляется - или там стандарт нарушают? Ну насколько это "стандарт" я честно говоря не знаю :) Никогда не исследовал этот вопрос, но исключений из этого правила я не помню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 18:04 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
White Owl v6yЭто точно стандарт? Ссылку можно? (Вопрос для меня непринципиальный, поэтому самому искать ответ лень) Может быть это не стандарт, а типа соглашения компиляторов под Вин? Потому как под Линуксом по умолчанию никаких подчеркиваний впереди не добавляется - или там стандарт нарушают? Ну насколько это "стандарт" я честно говоря не знаю :) Никогда не исследовал этот вопрос, но исключений из этого правила я не помню. Я прошу прощений за занудство, но можно уточнить - исключений из какого правила и где? Потому как повторю еще раз: В Линуксе (да и во FreeBSD, а возможно и в других UNIX-ах) никаких подчеркиваний к именам функций, если не указать специальный ключик, не добавляется При линковке здесь ищется именно функция main, а не _main, и если этот ключик указать при компиляции основного модуля, то будут проблемы. Далее, как следствие, все стандартные библиотеки скомпилированы с именами функций без ведущего подчеркивания, и если в модуле, компилируемом с вышеуказанным ключом, попытаться вызвать функцию (скажем printf) из такой библиотеки, то получим undefined name. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 09:02 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
v6yЯ прошу прощений за занудство, но можно уточнить - исключений из какого правила и где? из правила: имя функции при компиляции предваряется знаком подчеркивания в C либо псевдослучайно (на основе имени класса) сгенерированым набором символом для C++ . Я не знаю зачем это делается, но все компиляторы чьи объектники и ассемблерный код я рассматривал делают именно так. Я ни разу не рассматривал объектники сгенирование гнусью под FreeBSD и Linux. Потому что там библиотеки собираются тем же компилятором что и пользовательские программы, и различий в форматах библиотек быть не может. А вот различных компиляторов под MS-DOS и Windows много, приходится иногда разбираться чем сделана та или иная библиотека. И все DOS/Windows компиляторы этому правилу следуют. Кстати, под QNX4 использовался Watcom чьи корни идут из ДОС - там тоже использовались подчеркивания, хоть QNX тоже юниксоподобная ОС :) В QNX6 уже GNU C используется, так что там может быть и нету подчерков в библиотеке. v6yДалее, как следствие, все стандартные библиотеки скомпилированы с именами функций без ведущего подчеркивания, и если в модуле, компилируемом с вышеуказанным ключом, попытаться вызвать функцию (скажем printf) из такой библиотеки, то получим undefined name. Все верно c точностью до наоборот :) Если например в MS VC скомпилировать модуль вызывающий printf() с запретом использовать подчеркивания - этот printf() не будет найден в стандартной библиотеке, потому что он там лежит как _printf() :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:38 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
White Owl Вот и я говорю - в форточках с досом одни правила без исключений, а в Линуксе другие. Намекаю значит, что это типа соглашение для той или иной ОС, а не правило или тем более стандарт вообще, как можно подумать из ваших постов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 22:55 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
v6y White Owl Вот и я говорю - в форточках с досом одни правила без исключений, а в Линуксе другие. Намекаю значит, что это типа соглашение для той или иной ОС, а не правило или тем более стандарт вообще, как можно подумать из ваших постов :) Да при чем здесь операционная система вообще? Из всех известных мне компиляторов только один GNU C не подчиняется этому правилу. Вроде бы не подчиняется! У меня просто нет сейчас возможности проверить :). Да, это не стандарт, но тем не менее это широко известное правило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 23:43 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
White OwlДа при чем здесь операционная система вообще? Из всех известных мне компиляторов только один GNU C не подчиняется этому правилу. Вроде бы не подчиняется! У меня просто нет сейчас возможности проверить :). Да, это не стандарт, но тем не менее это широко известное правило. Ну как причем? :) Между прочим GNU C под Виндой эти подчеркивания добавляет (Подчиняется! Под Виндой!), а по крайней мере под Линукс и FreeBSD (POSIX?) - нет. Значит от операционки все таки зависит? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 08:25 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
да наверно прога на gcc под виндой линкуется с какими-то системными библиотеками отсюда naming conventions. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 11:07 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
>псевдослучайно скажут же)) Имена функций в объектнике генерятся совсем не случайным образом. Каждое имя состоит из имени класса а заодно и списка параметров которые эта функция (метод) юзает. Это имя генерится специфическиским образом в зависимости от компилера. Поэтому если под виндой мы прокомпилим два с++ кода - один на MSVC другой на gcc, то они не слинкуются. Однако, если использовать plain C - всё будет работать на ура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 15:14 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
тут как раз речь что на w2k в еxtern "C" (читай plain c) имя функции уродуется -- добавляется подчеркивание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 15:41 |
|
||
|
Ассемблерные вставки в c++. GNU
|
|||
|---|---|---|---|
|
#18+
gardenmanПоэтому если под виндой мы прокомпилим два с++ кода - один на MSVC другой на gcc, то они не слинкуются. Однако, если использовать plain C - всё будет работать на ура. ... то тоже не слинкуются. Разный формат объектников. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 19:40 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33212347&tid=2032901]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 393ms |

| 0 / 0 |
