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.
Gast
#1363794
> 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
Bitte melde dich an, um einen Beitrag zu schreiben.