2016-09-27 9 views
0

Эти 2 соглашения используются вместе в режиме компиляции x86?Являются ли функции-члены C++ скомпилированы с использованием соглашения cdecl + fastcall по умолчанию?

А для 64-битной компиляции нет cdecl + fastcall? Совместимость с AMD 64 ABI? Если да, то как отложить между stdcall и cdecl в режиме 64 бит?

ответ

4

Эти 2 соглашения используются вместе в режиме компиляции x86?

Нет. Откуда вы взяли эту идею? Каждое соглашение о вызове отличается, и любая данная функция может использовать только одно соглашение о вызове за раз. Не только это, но и fastcall не является стандартизованным. Различные 32-битные компиляторы реализуют его по-разному, если вообще, поэтому его нельзя использовать для переносимого кода. Единственными стандартными переносными соглашениями о вызовах в 32 бит являются cdecl и stdcall.

А для 64-битной компиляции нет cdecl + fastcall? Совместимость с AMD 64 ABI?

Да. В 64-битной версии существует только одно универсальное соглашение. 32-битные вызовы, используемые явно в коде, игнорируются.

Если да, то как отложить между stdcall и cdecl в режиме 64 бит?

У вас нет. Потому что их не существует.

 Смежные вопросы

  • Нет связанных вопросов^_^