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?
- ADe later gelinkte wordt automatisch gebruikt en er is geen fout
- BEr volgt een fout bij het linken omdat hetzelfde symbool tweemaal is gedefinieerd
- 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.
Verder: nog 9 vragen over Linker, loader en uitvoerbare formaten