Linker, Loader und ausführbare Formate
In a.c und b.c wurde jeweils eine globale Funktion gleichen Namens void init(void) ohne static definiert und gelinkt. Was geschieht?
- ADie später gelinkte wird automatisch verwendet, und es gibt keinen Fehler
- BDa dasselbe Symbol zweimal definiert ist, tritt beim Linken ein Fehler auf
- CDie beiden Funktionen werden automatisch zu einer zusammengeführt, und beide Verarbeitungen werden nacheinander ausgeführt
Antwort und Erläuterung anzeigen
Antwort: B. Da dasselbe Symbol zweimal definiert ist, tritt beim Linken ein Fehler auf
Globale Funktionen ohne static teilen sich einen Namen im gesamten Programm. Bei zwei Definitionen desselben Namens kann der Linker nicht entscheiden, an welche die Referenz gebunden werden soll, und meldet den Fehler „multiple definition“. Eine nur innerhalb einer Datei verwendete Funktion wird mit static nach außen unsichtbar gemacht, sodass auch bei gleichem Namen in einer anderen Datei keine Kollision auftritt.