Warnung: implicit declereation of.

Gast #222393
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 .....
Gast #222395
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.
Gast #222396
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?
Gast #222397
> 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.
Gast #222399
> 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!
Gast #222400
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.