|
|
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
Дайте пожалуйста информацию о том какая разница между Extern "C" / cdecl / _Cdecl / __Cdecl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 05:23 |
|
||
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
вроде три последних задефайнены друг на друга (так же как asm{} _asm{} __asm{} ) про первую не уверен. а вообще все вроде как указывает, что параметры следует передавать в стеке. (противоположность - __fastcall) аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 13:30 |
|
||
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
nrmBeginnerДайте пожалуйста информацию о том какая разница между Extern "C" / cdecl / _Cdecl / __Cdecl extern "C" - значит что имя функции надо при компиляции изменять по правилам языка С а не С++ cdecl, _Cdecl и __Cdecl - одно и то же, означают что функции будут получать параметры на стеке по правилам языка С. То есть сначала параметры, потом адрес возврата. Противоположность сdecl - stdcall (оно же pascal) на стек кладется адрес возврата, потом параметры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 17:43 |
|
||
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
White Owl nrmBeginnerДайте пожалуйста информацию о том какая разница между Extern "C" / cdecl / _Cdecl / __Cdecl extern "C" - значит что имя функции надо при компиляции изменять по правилам языка С а не С++ cdecl, _Cdecl и __Cdecl - одно и то же, означают что функции будут получать параметры на стеке по правилам языка С. То есть сначала параметры, потом адрес возврата. Противоположность сdecl - stdcall (оно же pascal) на стек кладется адрес возврата, потом параметры. Да фиг там. Аддресс возврата всегда самый последний - процессор сам его пихает на стек перед самым прыжком. Вопрос - кто будет чистить стек, и как пихать параметры - спарава налево или слева направо. В С количество параметров на стеке может менятся динамически, поетому рутина, которую вызывают, не знает сколько там байт и не чистит стек. Чистит тот, кто звал рутину. В stdcall там указывается количество байт передаваемых на стеке, и рутина сама стек подчисщает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 21:23 |
|
||
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
nrmBeginner пишет: > Автор: "nrmBeginner" > Дайте пожалуйста информацию о том какая разница между Extern "C" / cdecl > / _Cdecl / __Cdecl Хочется еще раз подчеркнуть. extern "C" - говорит только о том, что имя функции не надо декорировать, и надо добавить в начале имени функции символ подчеркивания. "_" extern "C" - языковое и стандартное средство. Все остальные модификаторы - это нестандартные деклараторы, определяющие соглашения о вызовах функций. Они ни как не связаны с extern "C", а ортогональны ему. О том, что какие модификаторы делают -уже сказали. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2007, 12:20 |
|
||
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
Ребята, кто как передает и кто как чистит понятно и без этого (это я здесь прочитал на http://msdn.microsoft.com/library/en-us/vclang/html/_core_argument_passing_and_naming_conventions.asp ) и понятно что все они не pascal и не stdcall, но вопрос вот в чем - если они означают одно и тоже то почему названия разные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2007, 03:17 |
|
||
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
nrmBeginner пишет: > и понятно что все они не pascal и не stdcall, но вопрос вот в чем - если > они означают одно и тоже то почему названия разные? extern "C" - не одно и то же со всем остальным здесь рассматриваемым. Всяческие __cdecl - ы -- штука нестандартная, и может называться в разных компиляторах по-разному, как захочет производитель. Иногда разные названия существовали чисто по историческим причинам - одно работает сейчас в компиляторе, другие работали когда-то в старых или других компиляторах и поддерживаются с помошью макросов препроцессора. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2007, 09:21 |
|
||
|
Отличия вызовов функций в стиле С
|
|||
|---|---|---|---|
|
#18+
MasterZiv nrmBeginner пишет: > и понятно что все они не pascal и не stdcall, но вопрос вот в чем - если > они означают одно и тоже то почему названия разные? extern "C" - не одно и то же со всем остальным здесь рассматриваемым. Всяческие __cdecl - ы -- штука нестандартная, и может называться в разных компиляторах по-разному, как захочет производитель. Иногда разные названия существовали чисто по историческим причинам - одно работает сейчас в компиляторе, другие работали когда-то в старых или других компиляторах и поддерживаются с помошью макросов препроцессора. Posted via ActualForum NNTP Server 1.4 Но в MS Visual C есть как _Cdecl так и __Cdecl. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 00:52 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2029335]: |
0ms |
get settings: |
4ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 448ms |

| 0 / 0 |
