Hallo. Was bedeutet die warnung "implicit declereation of...". Die Warnung bekomm ich haufenweise wenn ich mein Programm compiliere. Aber ich kekomm keinen fehler sind alles nur warnungen. MfG
"implicit declaration" - eine implizite Deklaration. Magst mal 'nen Quelltextausschnitt posten?
Also z.B. datei usw.c
1 | #include "usw.h" |
2 | |
3 | ....
|
4 | lcd_puts (" "); |
5 | ....
|
datei usw.h
1 | #include "../LCD/lcd.h" |
2 | ...
|
datei lcd.h (LIB von Peter Fleurey)
1 | ...
|
2 | extern void lcd_puts(const char *s); |
3 | ...
|
Makefile:
1 | SRC = .... lcd/lcd.c ..... |
Achso: der compiler gibt "usw.c:130: warning: implicit declaration of function `lcd_puts'"
Ah....moment....das gleiche rpblem hab ich mit einer funktion uart_puts()....diese funktion ist allerdings als static deklariert. wiso kann ich dann überhaupt aus einer anderen Datei diese funtktionen ausführen. Ich glaub ich bring mit dem extern und static irgendwas durcheinander.
Hab den Fehler gefunden. Hatte am anfang der header datei ausversehen (lcd.h) #ifndef MAIN_H #define MAIN_H stehen. aber wie konnte der GCC dann überhaupt noch weiter machen und wiso gibt der mir nur ne warnung und keinen Fehler. werden die betroffenen funktionen einfach nicht ausgeführt oder wie?
> aber wie konnte der GCC dann überhaupt noch weiter machen und wiso > gibt der mir nur ne warnung und keinen Fehler. Weil C das so vorschreibt. > werden die betroffenen funktionen einfach nicht ausgeführt oder > wie? Doch, werden sie. Aber der Compiler führt keine Prüfung von Parametertyp und -anzahl durch.
Heisst das, ich kann die funtilktion mit falschen parametern ausführen ? Und des gibt keine feher ?
> Heisst das, ich kann die funtilktion mit falschen parametern > ausführen ? Vielleicht, vielleicht auch nicht. Du kannst es versuchen, ohne daß dein Compiler dir einen Fehler melden wird (kann). Das heißt nicht, daß es auch funktioniert. > Und des gibt keine feher ? Doch, natürlich gibt's die. Aber das kann der Compiler ja nicht prüfen, wenn du ihm nicht sagst, von welchem Typ die Argumente sein müssen. Er kann dann auch nicht die autmoatischen Typkonvertierungen ausführen, die er normalerweise ausführen würde. Der Grund, warum es das gibt, ist historischer Art. In C gab es nicht immer Prototypen. PS: Du plenkst!
Du kannst falsche Parameter übergeben, das ist überhaupt kein Problem. Wenn Du die Funktion aber in einer anderen Datei "static" definiert hast, und es sonst keine Funktion mit dem gleichen Namen gibt, bekommst Du spätestens beim Linken einen Fehler, da die Funktion nicht vorhanden ist.
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.