¿Cómo se puede lograr tarde binding en lenguaje C?¿Cómo se puede lograr la vinculación tardía en el lenguaje C?
Respuesta
La vinculación tardía no es realmente una función del lenguaje C en sí, más algo que su entorno de ejecución le brinda.
Muchos sistemas proporcionarán enlace diferido como una característica del vinculador/cargador y también 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 puede acceder o llamarlo).
La única forma semi-portátil de obtener vinculante tarde con el estándar C sería usar algún truco con system()
e incluso eso es al menos parcialmente específico de la implementación.
Si no está hablando tanto de enlaces diferidos sino de polimorfismo, puede lograr ese efecto con los punteros de función. Básicamente, crea un struct
que tiene todos los datos para un tipo junto con punteros de función para ubicar los métodos para ese tipo. Luego, en el "constructor" (normalmente una función init()), configura los punteros a las funciones relevantes para ese tipo.
Aún necesita incluir todo el código, incluso si no lo usa, pero es posible para obtener el polimorfismo de esa manera.
El enlace de símbolos en C siempre se realiza en tiempo de compilación, nunca en 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.
Utilice Objective-C o Lua. Ambos son lenguajes de enlace tardío que pueden interactuar fácilmente con C.
Por supuesto, usted podría implementar su propio esquema de resolución de nombres, pero ¿por qué reinventar la rueda?
Desafortunadamente no especificó un SO. Para Unix, puede usar bibliotecas compartidas o crear una estructura de módulo configurable (complemento). Para más detalles, puede encontrar útil el código fuente de un servidor web apache 1.3. http://httpd.apache.org/download.cgi
cppdev parece ser el único en dar en el clavo con su comentario. Por favor, eche un vistazo a the definition itself. En pocas palabras:
Enlace tardío, o de enlace dinámico, es un mecanismo de programación informática en el que el método se llama a un objeto es buscado por su nombre en tiempo de ejecución.
Todas las demás respuestas solo omiten el punto principal, es decir, "buscar por nombre".
La solución necesaria sería muy similar a una tabla de búsqueda de punteros a funciones junto con una o dos funciones para seleccionar la correcta por su nombre (o incluso por firma). Lo llamamos una "tabla hash".
- 1. encuadernación tardía en C
- 2. Cómo lograr esta función en C/C++
- 3. Encuadernación temprana y tardía
- 4. Diferencia entre reflexión y vinculación tardía en Java con ejemplos en tiempo real
- 5. ¿Cómo se puede lograr un efecto "knockout" usando CSS?
- 6. ¿Cómo lograr const-correctness en C#?
- 7. Vinculación estática en C#
- 8. vinculación externa en C
- 9. ZeroMQ: cómo lograr un multihilo C-like
- 10. ¿Cómo lograr que los usuarios se basen en el rol?
- 11. ¿Se puede lograr tal alineación sin <table>?
- 12. ¿Extender el lenguaje C#?
- 13. Lograr la calidad de impresión de MS Word en C#
- 14. PHP 5.2 Equivalente a la unión estática tardía (nueva estática)?
- 15. Llamar C++ (C) desde el lenguaje D
- 16. ¿Cómo lograr el enmascaramiento dinámico de UIView?
- 17. cómo lograr la paginación en lucene?
- 18. ¿Cómo se puede ejecutar un programa compilado en el lenguaje de máquina en diferentes máquinas?
- 19. ¿Se interpreta el lenguaje R?
- 20. Cómo dibujar el gráfico en framebuffer usando el lenguaje c ...?
- 21. Vinculación de variables externas en C
- 22. Iterator en lenguaje C
- 23. Cambiar la configuración de la BIOS usando el lenguaje C
- 24. ¿Cómo puedo lograr ThreadPool.Join?
- 25. búsqueda de caracteres en el lenguaje de la secuencia C
- 26. ¿Se puede ejecutar una función en la inicialización en c?
- 27. ¿Cómo se puede emular el espacio de nombres en C?
- 28. Extender el lenguaje C#, ¿cuánto esfuerzo/ganancia?
- 29. Segmentación de la memoria en el lenguaje C
- 30. ¿Qué se puede lograr en una aplicación móvil nativa que no se puede hacer en una aplicación web HTML5?
¿Qué le parece usar una matriz de indicadores de función. A continuación, podemos elegir el puntero de función de la matriz en función de la entrada del usuario – cppdev