www.mikrocontroller.net

Forum: Compiler & IDEs Merkt der Linker es nicht, wenn Funktion und Aufruf nicht passen?


Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
mir ist gerade aufgefallen, dass es der Linker anscheinend nicht merkt, 
wenn eine Funktion einmal mit anderen Parametern aufgerufen wird, als in 
der Implementierung der Funktion angegeben. Ist dies normal, oder gibt 
es ein Linker Parameter um in solchen Fällen eine Warnung zu erzeugen? 
Sonst könnte hier doch eine sehr schwer aufzuspürende Fehlerquelle 
liegen.

Erzeugt hatte ich die Konstellation wie folgt:
Definition in der .h Datei mit einem Parameter mehr als in der 
Implementierung in der .c Datei, wobei die .c Datei versehentlich nicht 
ihren eigenen Header eingebunden hat. Aus einer anderen .c Datei dann 
ein Aufruf passend zur Definition in der .h Datei. Somit konnte der 
Compiler noch keinen Fehler feststellen.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist dies normal, oder gibt es ein Linker Parameter um in solchen
> Fällen eine Warnung zu erzeugen?

Der Linker kennt nur Symbole, die er versucht, zu Deckung zu bringen.
In C entsprechen diese Symbole im Wesentlichen den Funktions- bzw.
Variablennamen. Deswegen ist es sogar möglich, aus einer C-Datei eine
"Funktion" aufzurufen, die in einer anderen C-Datei in Wirklichkeit als
Variable definiert wurde, was natürlich zu einem Segfault führt.

Anders verhält es sich bei C++: Hier werden Informationen über eine
Funktion zusätzlich zum Funktionnamen in den Symbolnamen hineinkodiert.
Nur mit diesem Trick ist das Überladen von Funktionen möglich. Als
angenehmen Nebeneffekt bekommt man in deinem Fall einen Linker-Fehler
angezeigt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.