stringtranslate.com

Enlace (software)

En los lenguajes de programación, particularmente los compilados como C , C++ y D , el enlace describe cómo los nombres pueden o no referirse a la misma entidad en todo el programa o en una sola unidad de traducción .

La staticpalabra clave se utiliza en C para restringir la visibilidad de una función o variable a su unidad de traducción. Esto también es válido en C++. (C++ 98/03 desaprobó este uso en favor de espacios de nombres anónimos , pero ya no está en desuso en C++ 11). Además, C++ trata implícitamente cualquier constvariable de ámbito de espacio de nombres como si tuviera un enlace interno a menos que se declare explícitamente extern, a diferencia de C.

El enlace de un nombre está relacionado con su ámbito , pero es distinto de él . El ámbito de un nombre es la parte de una unidad de traducción donde es visible. Por ejemplo, un nombre con ámbito global (que es lo mismo que el ámbito de archivo en C y el mismo que el ámbito de espacio de nombres global en C++) es visible en cualquier parte del archivo. Su ámbito terminará al final de la unidad de traducción, independientemente de si a ese nombre se le ha dado o no un enlace externo o interno.

Si el nombre tiene un enlace externo, la entidad que ese nombre denota puede ser referenciada desde otra unidad de traducción utilizando una declaración distinta para ese mismo nombre, y desde otros ámbitos dentro de la misma unidad de traducción utilizando declaraciones distintas. Si el nombre tuviera un enlace interno, dicha declaración denotaría una entidad distinta, aunque utilizaría el mismo nombre, pero su entidad podría ser referenciada por declaraciones distintas dentro de la misma unidad de traducción. Un nombre que no tiene ningún enlace no puede ser referenciado desde declaraciones en ámbitos diferentes, ni siquiera desde dentro de la misma unidad de traducción. Ejemplos de tales nombres son los parámetros de funciones y variables locales. Los detalles difieren entre C (donde solo los objetos y funciones -pero no los tipos- tienen enlace) y C++ y entre esta descripción simplificada.

La vinculación entre lenguajes debe realizarse con cierto cuidado, ya que los distintos lenguajes adornan sus símbolos externos de manera diferente. Un modismo común se utiliza extern "C"para vincular el código C++ y C.

Enlace en C

Definición de "enlace" citada de la norma ISO/IEC 9899:TC3 (norma C99). C utiliza el término "identificador" donde este artículo utiliza "nombre" (este último es el que C++ utiliza para formalizar el enlace):

Un identificador declarado en diferentes ámbitos o en el mismo ámbito más de una vez puede hacerse referencia al mismo objeto o función mediante un proceso llamado vinculación. [1]

El siguiente es un ejemplo común de vinculación:

/* archivo demo1.c */ /* extern */ void foo ( void ); /* extern opcional - es el predeterminado */ int main ( void ) { foo (); return 0 ; }          
 /* archivo demo2.c */ void foo ( void ) { ... }   

La función foose declara en dos archivos, con su cuerpo de función definido en demo2.c. A través de un enlace, foollamado en main()dentro demo1.chace referencia a fooen demo2.c. Este es un ejemplo de enlace externo para una función.

Véase también

Referencias

  1. ^ ISO/IEC 9899. Documentos oficiales de la norma C99, incluidas las correcciones técnicas y la justificación. A fecha de 2007, la última versión de la norma es "ISO/IEC 9899:TC3" (PDF) . (3,61  MB )