Éditeurs de liens, chargeurs et exécutables

La même fonction globale void init(void), sans static, est définie à la fois dans a.c et b.c, puis on effectue l'édition de liens. Que se passe-t-il ?

  1. ACelle liée en dernier est utilisée automatiquement, sans erreur
  2. BUne erreur survient à l'édition de liens, le même symbole étant défini deux fois
  3. CLes deux fonctions sont automatiquement fusionnées et leurs traitements exécutés successivement
Afficher la réponse et l'explication

Réponse : B. Une erreur survient à l'édition de liens, le même symbole étant défini deux fois

Une fonction globale sans static partage un nom unique dans tout le programme. Avec deux définitions du même nom, l'éditeur de liens ne peut décider à laquelle associer les références, d'où une erreur de définition multiple (multiple definition). Pour une fonction utilisée uniquement dans le fichier, il suffit d'ajouter static pour la rendre invisible de l'extérieur ; elle n'entrera alors pas en conflit avec un homonyme dans un autre fichier.

S'entraîner sur ce thème Retour au thème

Autres questions sur Éditeurs de liens, chargeurs et exécutables

  1. Quel est l'effet de la définition d'une fonction avec static en C (par exemple static int helper(void)) ?
  2. Que signifie l'écriture « extern int count; » en C ?
  3. Quelle affirmation concernant les fichiers au format ELF, courant sous Linux notamment, est correcte ?
  4. Que contient la section .text d'un exécutable ?
  5. Dans quelle section est généralement placée une variable globale écrite hors de toute fonction en C sous la forme « int limit = 100; » ?

Comparatifs sur ce thème