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.
> 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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.