Compartir a través de


/Gd, /Gr, /Gz (Convención de llamada)

Estas opciones determinan el orden en que se insertan en la pila los argumentos de una función, si la función llamadora o la llamada quita los argumentos de la pila al finalizar la llamada, y la convención para creación de nombres representativos que utiliza el compilador para identificar funciones individuales.

/Gd
/Gr
/Gz

Comentarios

Nota

Estas opciones del compilador solo están disponibles en el compilador destinado a x86; no están disponibles en los compiladores destinados a x64 o Itanium.

/Gd, la opción predeterminada, especifica la convención de llamada __cdecl para todas las funciones, excepto las funciones miembro de C++ y las funciones marcadas como __stdcall o __fastcall.

/Gr especifica la convención de llamada __fastcall para todas las funciones, excepto las funciones miembro de C++ y las funciones marcadas como __cdecl o __stdcall. Todas las funciones __fastcall deben tener prototipos.

/Gz especifica la convención de llamada __stdcall para todas las funciones, excepto las funciones miembro de C++ y las funciones marcadas como __cdecl o __fastcall. Todas las funciones __stdcall deben tener prototipos.

Las funciones que toman un número variable de argumentos deben marcarse como __cdecl.

/Gd, /Gr y /Gz no son compatibles con /clr:safe o /clr:pure.

Nota

Para los procesadores x86, de forma predeterminada, las funciones miembro de C++ utilizan __thiscall.

Para todos los procesadores, una función miembro marcada explícitamente como __cdecl, __fastcall o __stdcall utiliza la convención de llamada especificada. Una función miembro que acepte un número de argumentos variable siempre utiliza la convención de llamadas __cdecl.

Específico de __cdecl

Para C, la convención de nomenclatura __cdecl utiliza el nombre de la función precedido de un carácter de subrayado ( _ ); no se realiza conversión de mayúsculas a minúsculas. Las funciones de C++, salvo que se declaren como extern "C", usan un esquema de decoración de nombres diferente. Para obtener más información, vea Nombres representativos.

Específico de __fastcall

Algunos argumentos de una función __fastcall se pasan en registros (para procesadores x86, ECX y EDX) y el resto se insertan en la pila de derecha a izquierda. La rutina invocada obtiene estos argumentos desde la pila antes de su retorno. Normalmente, /Gr disminuye el tiempo de ejecución.

Nota

Tenga cuidado cuando utilice la convención de llamada __fastcall para una función escrita en lenguaje de ensamblado en línea. El uso de registros podría causar conflictos con el uso del compilador.

Para C, la convención de nomenclatura __fastcall utiliza el nombre de la función precedido de un signo de arroba (@) y seguido del tamaño de los argumentos de la función en bytes. No se lleva a cabo una conversión de mayúsculas o minúsculas. El compilador usa la plantilla siguiente para la convención de nomenclatura:

@function_name@number

Si utiliza la convención de nomenclatura __fastcall, utilice los archivos de inclusión estándar. De lo contrario, obtendrá referencias externas sin resolver.

Específico de __stdcall

Los argumentos de una función __stdcall se insertan en la pila de derecha a izquierda y la función llamada obtiene estos argumentos de la pila antes de su retorno.

Para C, la convención de nomenclatura __stdcall utiliza el nombre de la función precedido de un carácter de subrayado ( _ ) y seguido de un signo de arroba (@) y del tamaño de los argumentos de la función en bytes. No se lleva a cabo una conversión de mayúsculas o minúsculas. El compilador usa la plantilla siguiente para la convención de nomenclatura:

_functionname@number

Específico de x86

Esta opción no tiene efecto en la decoración de nombres de los métodos y funciones de C++. Los métodos y funciones de C++, salvo que se declaren como extern "C", utilizan un esquema de decoración de nombres diferente. Para obtener más información, vea Nombres representativos.

Para obtener más información acerca de las convenciones de llamada, vea Calling Conventions.

Específico de END x86

Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener información detallada, vea Cómo: Abrir páginas de propiedades del proyecto.

  2. Haga clic en la carpeta C/C++.

  3. Haga clic en la página de propiedades Avanzadas.

  4. Modifique la propiedad Calling Convention.

Para establecer esta opción del compilador mediante programación

Vea también

Referencia

Opciones del compilador

Establecer las opciones del compilador