mikrocontroller.net

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


Autor: Jenzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"implicit declaration" - eine implizite Deklaration.

Magst mal 'nen Quelltextausschnitt posten?

Autor: Jenzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also z.B.

datei usw.c
#include "usw.h"

....
lcd_puts (" ");
....

datei usw.h
#include "../LCD/lcd.h"
...

datei lcd.h (LIB von Peter Fleurey)
...
extern void lcd_puts(const char *s);
...

Makefile:
SRC = .... lcd/lcd.c ..... 

Autor: Jenzi (Gast)
Datum:

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

Autor: Jenzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jenzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jenzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heisst das, ich kann die funtilktion mit falschen parametern ausführen ?

Und des gibt keine feher ?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.