powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Отличия вызовов функций в стиле С
8 сообщений из 8, страница 1 из 1
Отличия вызовов функций в стиле С
    #34351562
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайте пожалуйста информацию о том какая разница между Extern "C" / cdecl / _Cdecl / __Cdecl
...
Рейтинг: 0 / 0
Отличия вызовов функций в стиле С
    #34351894
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде три последних задефайнены друг на друга (так же как asm{} _asm{} __asm{} )
про первую не уверен.

а вообще все вроде как указывает, что параметры следует передавать в стеке. (противоположность - __fastcall)

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
Отличия вызовов функций в стиле С
    #34352227
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginnerДайте пожалуйста информацию о том какая разница между Extern "C" / cdecl / _Cdecl / __Cdecl
extern "C" - значит что имя функции надо при компиляции изменять по правилам языка С а не С++
cdecl, _Cdecl и __Cdecl - одно и то же, означают что функции будут получать параметры на стеке по правилам языка С. То есть сначала параметры, потом адрес возврата. Противоположность сdecl - stdcall (оно же pascal) на стек кладется адрес возврата, потом параметры.
...
Рейтинг: 0 / 0
Отличия вызовов функций в стиле С
    #34352401
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl nrmBeginnerДайте пожалуйста информацию о том какая разница между Extern "C" / cdecl / _Cdecl / __Cdecl
extern "C" - значит что имя функции надо при компиляции изменять по правилам языка С а не С++
cdecl, _Cdecl и __Cdecl - одно и то же, означают что функции будут получать параметры на стеке по правилам языка С. То есть сначала параметры, потом адрес возврата. Противоположность сdecl - stdcall (оно же pascal) на стек кладется адрес возврата, потом параметры.

Да фиг там. Аддресс возврата всегда самый последний - процессор сам его пихает на стек перед самым прыжком.
Вопрос - кто будет чистить стек, и как пихать параметры - спарава налево или слева направо.

В С количество параметров на стеке может менятся динамически, поетому рутина, которую вызывают, не знает сколько там байт и не чистит стек. Чистит тот, кто звал рутину. В stdcall там указывается количество байт передаваемых на стеке, и рутина сама стек подчисщает
...
Рейтинг: 0 / 0
Отличия вызовов функций в стиле С
    #34352674
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginner пишет:
> Автор: "nrmBeginner"
> Дайте пожалуйста информацию о том какая разница между Extern "C" / cdecl
> / _Cdecl / __Cdecl

Хочется еще раз подчеркнуть.

extern "C" - говорит только о том, что имя функции не надо декорировать,
и надо добавить в начале имени функции символ подчеркивания. "_"

extern "C" - языковое и стандартное средство.

Все остальные модификаторы - это нестандартные деклараторы, определяющие
соглашения о вызовах функций. Они ни как не связаны с extern "C", а ортогональны
ему. О том, что какие модификаторы делают -уже сказали.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отличия вызовов функций в стиле С
    #34353189
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, кто как передает и кто как чистит понятно и без этого (это я здесь прочитал на http://msdn.microsoft.com/library/en-us/vclang/html/_core_argument_passing_and_naming_conventions.asp ) и понятно что все они не pascal и не stdcall, но вопрос вот в чем - если они означают одно и тоже то почему названия разные?
...
Рейтинг: 0 / 0
Отличия вызовов функций в стиле С
    #34353229
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginner пишет:
> и понятно что все они не pascal и не stdcall, но вопрос вот в чем - если
> они означают одно и тоже то почему названия разные?

extern "C" - не одно и то же со всем остальным здесь рассматриваемым.

Всяческие __cdecl - ы -- штука нестандартная, и может называться
в разных компиляторах по-разному, как захочет производитель. Иногда
разные названия существовали чисто по историческим причинам - одно
работает сейчас в компиляторе, другие работали когда-то в старых
или других компиляторах и поддерживаются с помошью макросов препроцессора.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отличия вызовов функций в стиле С
    #34369336
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
nrmBeginner пишет:
> и понятно что все они не pascal и не stdcall, но вопрос вот в чем - если
> они означают одно и тоже то почему названия разные?

extern "C" - не одно и то же со всем остальным здесь рассматриваемым.

Всяческие __cdecl - ы -- штука нестандартная, и может называться
в разных компиляторах по-разному, как захочет производитель. Иногда
разные названия существовали чисто по историческим причинам - одно
работает сейчас в компиляторе, другие работали когда-то в старых
или других компиляторах и поддерживаются с помошью макросов препроцессора.
Posted via ActualForum NNTP Server 1.4

Но в MS Visual C есть как _Cdecl так и __Cdecl.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Отличия вызовов функций в стиле С
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]