Страница 2 из 2

C, PASCAL (parameter passing conventions)

Добавлено: 29 Октябрь 2015, 11:48
RaFaeL
На 6.3 с PASCAL тоже компилилось, но вылетало при попытках работы

C, PASCAL (parameter passing conventions)

Добавлено: 29 Октябрь 2015, 12:08
PavelNK
Все правильно, компилится будет. Можно убрать вообще и C, и PASCAL, и RAW, компилится будет. Не будет компилится только если убрать NAME. Но работать не будет - будет вылетать, т.к. параметры будут передаваться неправильно - об этом писал выше.

C, PASCAL (parameter passing conventions)

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

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

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

Посмотрел свои рабочие исходники, а также Libsrc разных версий Clarion: совместное описание C / Pascal
в рамках одной программы используются во многих прототипах и абсолютно никак не влияют на работу .... :)

C, PASCAL (parameter passing conventions)

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