Linker, loader en uitvoerbare formaten

In zowel a.c als b.c is een globale functie void init(void) met dezelfde naam gedefinieerd zonder static, en de bestanden worden gelinkt. Wat gebeurt er?

  1. ADe later gelinkte wordt automatisch gebruikt en er is geen fout
  2. BEr volgt een fout bij het linken omdat hetzelfde symbool tweemaal is gedefinieerd
  3. CDe twee functies worden automatisch samengevoegd en beide bewerkingen worden achter elkaar uitgevoerd
Antwoord en toelichting tonen

Antwoord: B. Er volgt een fout bij het linken omdat hetzelfde symbool tweemaal is gedefinieerd

Een globale functie zonder static deelt één naam met het hele programma. Bij twee definities met dezelfde naam kan de linker niet bepalen aan welke de verwijzing moet worden gekoppeld, dus volgt de fout multiple definition. Een functie die alleen binnen een bestand wordt gebruikt, kan met static onzichtbaar voor buiten worden gemaakt, zodat er geen conflict ontstaat ook als in een ander bestand dezelfde naam voorkomt.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Linker, loader en uitvoerbare formaten

  1. Wat is het juiste effect als in C een functie met static wordt gedefinieerd (bijvoorbeeld static int helper(void))?
  2. Wat is de juiste betekenis van „extern int count;” in C?
  3. Welke uitspraak over het ELF-formaat, dat veel op Linux wordt gebruikt, is juist?
  4. Wat staat er in de .text-sectie van een uitvoerbaar bestand?
  5. In welke sectie wordt in het algemeen de globale variabele „int limit = 100;” geplaatst, buiten een functie in C geschreven?

Vergelijkingen bij dit onderwerp