Поделиться через


/Gd, /Gr, /Gz (соглашения о вызовах)

Данные параметры определяют порядок, в котором аргументы функции передаются в стек, вызывающая или вызываемая функция удаляет аргументы из стека в конце вызова, а также соглашение об именах, используемое компилятором для идентификации отдельных функций.

/Gd
/Gr
/Gz

Заметки

ПримечаниеПримечание

Данные параметры компилятора доступны только в компиляторах для платформы x86. Они недоступны в компиляторах для x64 или Itanium.

/Gd (параметр по умолчанию) указывает соглашение о вызовах __cdecl для всех функций за исключением функций-членов C++ и функций, помеченных как __stdcall или __fastcall.

/Gr указывает соглашение о вызовах__fastcall для всех функций за исключением функций-членов C++ и функций, помеченных как __cdecl или __stdcall.Все функции __fastcall должны иметь прототипы.

/Gz указывает соглашение о вызовах __stdcall для всех функций за исключением функций-членов C++ и функций, помеченных как __cdecl или __fastcall.Все функции __stdcall должны иметь прототипы.

Функция, принимающая переменное число аргументов, должна быть помечена как __cdecl.

/Gd, /Gr и /Gz несовместимы с /clr:safe или /clr:pure.

ПримечаниеПримечание

Для процессоров x86 функции-члены С++ по умолчанию используют __thiscall.

Для всех процессоров функция-член, которая явно помечена как __cdecl, __fastcall или __stdcall, использует указанное соглашение о вызовах.Функция-член, которая принимает переменное число аргументов, всегда использует соглашение о вызовах __cdecl.

Особенности __cdecl

Для языка С в соглашении об именах __cdecl используется имя функции, которому предшествует символ подчеркивания ( _ ). Изменения регистра не происходит.Функции C++ используют другую схему именования, если только они не объявлены как extern "C".Дополнительные сведения см. в разделе Внутренние имена.

Особенности __fastcall

Некоторые аргументы функции __fastcall передаются в регистрах (для процессоров x86, ECX и EDX), а остальные передаются в стек справа налево.Вызываемая процедура извлекает из стека эти аргументы до возвращения.Как правило, параметр /Gr снижает время выполнения.

ПримечаниеПримечание

Следует соблюдать осторожность при использовании соглашения о вызовах __fastcall для любой функции, написанной на языке встроенной сборки.Использование регистров не должно конфликтовать с их использованием компилятором.

Для языка C соглашение об именах __fastcall использует имя функции, которому предшествует символ @. Затем следует размер аргументов функции в байтах.Изменения регистра не происходит.Компилятор использует следующий шаблон для соглашения об именах.

@function_name@number

При использовании соглашения об именах __fastcall следует использовать стандартные включаемые файлы.В противном случае могут образоваться неразрешаемые внешние ссылки.

Особенности __stdcall

Аргументы функции __stdcall передаются в стек справа налево, а вызываемая функция извлекает эти аргументы перед возвращением.

Для языка С соглашение об именах __stdcall использует имя функции, которому предшествует символ подчеркивания ( _ ) и за которым следует знак "@" и размер аргументов функции в байтах.Изменения регистра не происходит.Компилятор использует следующий шаблон для соглашения об именах.

_functionname@number

Специфика для платформы x86

Данный параметр не используется для именования методов и функций C++.Методы и функции C++ используют другую схему именования, если только они не объявлены как extern "C".Дополнительные сведения см. в разделе Внутренние имена.

Дополнительные сведения о соглашениях о вызовах см. в разделе Соглашения о вызовах.

Специфика для платформы x86 — окончание

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта.Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Откройте папку C/C++.

  3. Выберите страницу свойств Дополнительно.

  4. Измените свойство Соглашение о вызовах.

Установка данного параметра компилятора программным способом

  • Дополнительные сведения см. в разделе CallingConvention.

См. также

Ссылки

Параметры компилятора

Настройка параметров компилятора