Compartir a través de


Especificaciones de vinculación

El término “especificación de vinculación” hace referencia al protocolo para vincular funciones (o procedimientos) escritos en lenguajes diferentes.Las convenciones de llamada siguientes se ven afectadas:

  • distinción entre mayúsculas y minúsculas de nombres.

  • decoración de nombres.En C, los nombres de los prefijos del compilador con un subrayado.Esto se suele denominar “decoración.” En C++, la decoración de nombres se utiliza para conservar la información de tipo con la fase de vinculación.(Vea Nombres representativos)

  • Orden en el que los argumentos son esperados en la pila.

  • Responsabilidad de ajustar la pila al volver de la función.La función llamada o la función de llamada es responsable.

  • El paso de argumentos ocultos (si algunos argumentos ocultos se pasan).

extern string-literal { declaration-list }
extern string-literal declaration

La especificación de vinculación facilita gradualmente el trasladar el código de C a C++ permite el uso de código existente.

Específicos de Microsoft

Las únicas especificaciones de vinculación compatibles actualmente por Microsoft C++ son “C” y “C++”.

Específico de Microsoft de FINAL

El ejemplo siguiente declara las funciones atoi y atol con vinculación c:

extern "C"
{
    int  atoi( char *string );
    long atol( char *string );
}

Las llamadas a estas funciones se hace mediante vinculación c.El mismo resultado se puede lograr con estas dos declaraciones:

extern "C" int  atoi( char *string );
extern "C" long atol( char *string );

Específicos de Microsoft

Todos los archivos de inclusión estándar de Microsoft c utilizan directivas de compilación condicional para detectar la compilación de C++.Cuando se detecta la compilación de C++., prototipos se agregan en una directiva de extern “c” como sigue:

// Sample.h
#if defined(__cplusplus)
extern "C"
{
#endif

// Function declarations

#if defined(__cplusplus)
}
#endif 

Específico de Microsoft de FINAL

No necesita declarar las funciones en los archivos de inclusión estándar como extern “c”.

Si una función está sobrecargada, no más de una de las funciones del mismo nombre puede tener un especificador de vinculación.(Para obtener más información, vea La sobrecarga de la función.)

La tabla siguiente se muestra cómo funcionan las diferentes especificaciones de vinculación.

efectos de las especificaciones de Linkage

especificación

Efecto

en un objeto

Afecta al acoplamiento de ese objeto sólo

en una función

Afecta al acoplamiento de esa función y todas las funciones u objetos declarados dentro de

en una clase

Afecta al acoplamiento de todas las funciones y objetos de no miembro declarados dentro de la clase

Si una función tiene más de una especificación de vinculación, deben coincidir; es un error para declarar funciones como si tuvieran vinculación de C y C++.Además, si dos declaraciones para una función aparecen en un programa (una con una especificación de vinculación y otro sin — la declaración con la especificación de vinculación debe ser primera.Cualquier declaración redundante de funciones que ya tienen especificación de vinculación se proporciona vinculación especificado en la primera declaración.Por ejemplo:

extern "C" int CFunc1();
...
int CFunc1();            // Redeclaration is benign; C linkage is
                         //  retained.

int CFunc2();
...
extern "C" int CFunc2(); // Error: not the first declaration of
                         //  CFunc2;  cannot contain linkage
                         //  specifier.

Funciones y objetos explícitamente declarados mientras Estática dentro del cuerpo de un especificador compuesto de vinculación () se trata como funciones u objetos estáticos; se omite el especificador de vinculación.Otras funciones y objetos se comportan como si estuvieran declaradas mediante la palabra clave de extern .(Vea Mediante extern para especificar Linkage para obtener más información sobre la palabra clave de extern .)

Vea también

Referencia

Mediante extern para especificar Linkage