Pregunta

¿Cómo se puede lograr vinculante en lenguaje C?

¿Fue útil?

Solución

El enlace en tiempo no es realmente una función del propio lenguaje C, más algo que su entorno de ejecución ofrece para usted.

Muchos sistemas proporcionarán la vinculación diferida como una característica del enlazador / cargador y también se puede utilizar llamadas explícitas como dlopen (para abrir una biblioteca compartida) y dlsym (para obtener la dirección de un símbolo dentro de esa biblioteca para que pueda acceder a él o llamarlo).

La única manera semi-portátil de conseguir el enlace en tiempo con el estándar C sería utilizar algún truco con system() e incluso que es al menos parcialmente aplicación específica.

Si usted no está tanto hablar de vinculación diferida pero en lugar de polimorfismo, se puede lograr ese efecto con los punteros de función. Básicamente, se crea un struct que tiene todos los datos para un tipo junto con los punteros de función para la localización de los métodos de ese tipo. Luego, en el "constructor" (típicamente un init) () la función, se establecen los punteros de función a las funciones relevantes para ese tipo.

Todavía es necesario incluir todo el código, incluso si no lo usa, pero es posible obtener el polimorfismo de esa manera.

Otros consejos

Símbolo de unión en C siempre se realiza en tiempo de compilación, sin tiempo de ejecución.

Biblioteca de unión o enlace dinámico como se le llama, se realiza a través de dlopen() y dlsym() en * nix, y LoadLibrary() y GetProcAddress() en Windows.

  

¿Cómo se puede lograr el enlace en tiempo en lenguaje C?

El más cercano sería a través carga dinámica de biblioteca (DLL) como con dlopen & dlsym en Linux. De lo contrario, no está disponible directamente en C.

Utilice Objective-C o Lua. Ambos son lenguajes de enlace en tiempo que puede interactuar fácilmente con C.

Por supuesto que podría poner en práctica su propio esquema de resolución de nombres, pero ¿por qué reinventar la rueda?

Por desgracia no se ha especificado un sistema operativo. Para Unix puede utilizar bibliotecas compartidas, o cree una cuenta (plug-in) estructura de módulos configurables. Para más detalles se puede encontrar el código fuente de un servidor web Apache 1.3 útil. http://httpd.apache.org/download.cgi

cppdev parece ser el único que dio en el clavo con su / su observación. Por favor, eche un vistazo a la definición misma . En pocas palabras:

  

El enlace en tiempo, o de enlace dinámico, es un mecanismo de programación informática   en el que el método se llama a un objeto se busca por su nombre   en tiempo de ejecución.

Todas las demás respuestas simplemente pierden el punto principal, es decir "mirar hacia arriba por su nombre".

La solución necesaria sería muy similar a una tabla de búsqueda de punteros a funciones junto con una función o dos para seleccionar el más adecuado por su nombre (o incluso por la firma). Lo llamamos una "tabla hash".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top