Forum: Mikrocontroller und Digitale Elektronik Warnung: implicit declereation of.


von Jenzi (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

"implicit declaration" - eine implizite Deklaration.

Magst mal 'nen Quelltextausschnitt posten?

von Jenzi (Gast)


Lesenswert?

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 .....

von Jenzi (Gast)


Lesenswert?

Achso: der compiler gibt
"usw.c:130: warning: implicit declaration of function `lcd_puts'"

von Jenzi (Gast)


Lesenswert?

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.

von Jenzi (Gast)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von Jenzi (Gast)


Lesenswert?

Heisst das, ich kann die funtilktion mit falschen parametern ausführen ?

Und des gibt keine feher ?

von Rolf Magnus (Gast)


Lesenswert?

> 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!

von Unbekannter (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.