Question

Comment on peut arriver à la fin liant en langage C?

Était-ce utile?

La solution

La liaison tardive n'est pas vraiment une fonction de la langue C lui-même, quelque chose de plus que votre environnement d'exécution prévoit que vous.

De nombreux systèmes fourniront différé de liaison comme une caractéristique de l'éditeur de liens / chargeur et vous pouvez également utiliser des appels explicites tels que dlopen (pour ouvrir une bibliothèque partagée) et dlsym (pour obtenir l'adresse d'un symbole dans cette bibliothèque afin que vous puissiez l'accès ou l'appeler).

La seule façon semi-portable d'obtenir la liaison tardive avec la norme C serait d'utiliser une ruse avec system() et même qui est au moins partiellement spécifique à la mise en œuvre.

Si vous n'êtes pas tellement parler de la liaison différée mais polymorphisme, vous pouvez obtenir cet effet avec des pointeurs de fonction. Fondamentalement, vous créez un struct qui a toutes les données pour un type avec des pointeurs de fonction pour localiser les méthodes de ce type. Puis, dans le "constructeur" (généralement un init () fonction), vous définissez les pointeurs de fonction aux fonctions pertinentes pour ce type.

Vous avez encore besoin d'inclure tout le code, même si vous ne l'utilisez pas mais possible d'obtenir polymorphisme de cette façon.

Autres conseils

Symbole de liaison en C est toujours fait au moment de la compilation, jamais l'exécution.

Bibliothèque de liaison, ou liaison dynamique comme on l'appelle, se fait via dlopen() et dlsym() sur * nix, et LoadLibrary() et GetProcAddress() sous Windows.

  

Comment on peut obtenir la liaison tardive en langage C?

Le plus proche serait par chargement dynamique de bibliothèque (DLL) comme avec dlopen dlsym Linux. Dans le cas contraire, il est pas directement disponible dans C.

Utilisez Objective-C ou Lua. Les deux sont des langues en retard lié qui peut interfacer facilement avec C.

Bien sûr, vous pouvez mettre en œuvre votre propre système de résolution de noms, mais pourquoi réinventer la roue?

Malheureusement, vous ne spécifiez pas un système d'exploitation. Pour Unix, vous pouvez utiliser des bibliothèques partagées, ou créer une structure de module configurable (plugin). Pour plus de détails vous pouvez trouver le code source d'un serveur web apache 1.3 utile. http://httpd.apache.org/download.cgi

cppdev semble être le seul et unique de frapper la tache avec son / sa remarque. S'il vous plaît, jetez un oeil à la définition elle-même . En quelques mots:

  

La liaison tardive ou de liaison dynamique, est un mécanisme de programmation informatique   dans lequel le procédé étant appelé un objet est recherché par nom   lors de l'exécution.

Toutes les autres réponses manquent juste le point principal, qui est « chercher par nom ».

La solution nécessaire serait très similaire à une table de recherche de pointeurs vers des fonctions ainsi que d'une fonction ou deux pour sélectionner le droit par son nom (ou même par la signature). Nous appelons une "table de hachage".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top