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?

  1. ADie später gelinkte wird automatisch verwendet, und es gibt keinen Fehler
  2. BDa dasselbe Symbol zweimal definiert ist, tritt beim Linken ein Fehler auf
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Welche Wirkung hat es, in C eine Funktion mit static zu definieren (z. B. static int helper(void))?
  2. Was bedeutet die Angabe „extern int count;“ in C?
  3. Welche Aussage zum unter Linux u. a. üblichen ELF-Format ist richtig?
  4. Was steht in der Section .text einer ausführbaren Datei?
  5. In welcher Section wird eine außerhalb von Funktionen geschriebene globale Variable „int limit = 100;“ in C im Allgemeinen abgelegt?

Vergleiche zu diesem Thema