En los lenguajes de programación, particularmente los compilados como C , C ++ y D , la vinculación describe cómo los nombres pueden o no hacer referencia a la misma entidad en todo el programa o en una sola unidad de traducción .
La static
palabra clave se usa 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á desaprobado en C ++ 11.) Además, C ++ trata implícitamente cualquier const
variable de ámbito de espacio de nombres como si tuviera un vínculo interno a menos que se declare explícitamente extern
, a diferencia de C.
El vínculo de un nombre está relacionado con su alcance , pero es distinto . El alcance de un nombre es la parte de una unidad de traducción donde es visible. Por ejemplo, un nombre con alcance global (que es el mismo que el alcance del archivo en C y el mismo que el alcance del espacio de nombres global en C ++) es visible en cualquier parte del archivo. Su alcance terminará al final de la unidad de traducción, ya sea que ese nombre tenga o no un vínculo externo o interno.
Si el nombre tiene un vínculo externo, la entidad que el nombre denota puede ser referida desde otra unidad de traducción usando una declaración distinta para ese mismo nombre, y desde otros ámbitos dentro de la misma unidad de traducción usando declaraciones distintas. Si al nombre se le diera un enlace interno, tal declaración denotaría una entidad distinta, aunque usando el mismo nombre, pero su entidad podría ser referida por declaraciones distintas dentro de la misma unidad de traducción. No se puede hacer referencia a un nombre que no tiene ningún vínculo desde declaraciones en diferentes ámbitos, ni siquiera desde dentro de la misma unidad de traducción. Ejemplos de tales nombres son parámetros de funciones y variables locales. Los detalles difieren entre C (donde solo los objetos y funciones, pero no los tipos, tienen vínculos) y C ++ y entre esta descripción general simplificada.
La vinculación entre idiomas debe hacerse con cierto cuidado, ya que los diferentes idiomas adornan sus símbolos externos de manera diferente. Un modismo común se usa extern "C"
para vincular código C ++ y C.
Vinculación en C
Definición de 'vinculación' citada de ISO / IEC 9899: TC3 (estándar C99). C usa el término "identificador" donde este artículo usa "nombre" (el último de los cuales es lo que C ++ usa para formalizar el enlace):
Un identificador declarado en diferentes ámbitos o en el mismo ámbito más de una vez se puede hacer que se refiera al mismo objeto o función mediante un proceso llamado enlace. [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 ( vacío ) { foo (); return 0 ; }
/ * archivo demo2.c * / void foo ( void ) { ... }
La función foo
se declara en dos archivos, con su cuerpo de función definido en demo2.c . A través de la vinculación, foo
denominado en main()
el interior demo1.c se refiere a foo
en demo2.c . Este es un ejemplo de vinculación externa para una función.
Ver también
Referencias
- ^ ISO / IEC 9899 . Documentos oficiales C99, incluidas correcciones técnicas y una justificación. A partir de 2007, la última versión del estándar es "ISO / IEC 9899: TC3" (PDF) . (3,61 MiB )