C, PASCAL (parameter passing conventions)

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1377
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

C, PASCAL (parameter passing conventions)

Сообщение RaFaeL »

На 6.3 с PASCAL тоже компилилось, но вылетало при попытках работы
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

C, PASCAL (parameter passing conventions)

Сообщение PavelNK »

Все правильно, компилится будет. Можно убрать вообще и C, и PASCAL, и RAW, компилится будет. Не будет компилится только если убрать NAME. Но работать не будет - будет вылетать, т.к. параметры будут передаваться неправильно - об этом писал выше.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7375
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

C, PASCAL (parameter passing conventions)

Сообщение Игорь Столяров »

Admin писал(а): И вдобавок как программа будет работать (даже в дебаг режиме) и с C и с PASCAL если они меняют направление передачи параметров в стеке.
Привет !

Все нормально. Здесь скорее проблема с переводом справки.
Параметры C / Pascal не определяют порядок передачи параметров.

Смотрим русскоязычную справку:
-------------------------------------------
Атрибуты C и PASCAL в прототипе процедуры указывают, что параметры всегда передаются через стек.
В 32-х битных программах, и в С и в Паскаль языках параметры помещаются в стек справа налево по списку параметров.
Отличия заключаются в очистке стека при возврате (вызов (C) или вызов (PASCAL)).
Также в C/C++ имеются отличия в усечении внешних имен, но в Clarion усечение имен такое как для C и PASCAL.
-------------------------------------------

Посмотрел свои рабочие исходники, а также Libsrc разных версий Clarion: совместное описание C / Pascal
в рамках одной программы используются во многих прототипах и абсолютно никак не влияют на работу .... :)
За теми кто отстал - не возвращаться. (С) Кодекс
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

C, PASCAL (parameter passing conventions)

Сообщение PavelNK »

Игорь Столяров писал(а): Параметры C / Pascal не определяют порядок передачи параметров
Должны определять! Т.к. в Паскале параметры запихиваются в стек, начиная с первого. Поэтому процедуры, написанные на Паскале не могут иметь переменное кол-во параметров, оно заранее определено и процедура сама может очистить стэк. А в С наоборот, сначала запихивается последний. На верху стэка всегда первый параметр, поэтому С-шные процедуры могут иметь переменное кол-во параметров и именного поэтому она не может очистить стэк, а стэк очищает код, который вызывал процедуру. Но соглашения, в современных версиях языков, можно легко менять - в Кларионе аналог pragma.
Ответить