Praktikum 4: "Warning: implicit declaration of function

rick
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 105
Registriert: 17. Jan 2006 23:20

Praktikum 4: "Warning: implicit declaration of function

Beitrag von rick » 4. Jan 2007 21:58

Beispiel:

Code: Alles auswählen

int g(int m) {
int i = f(m);         //Warning: Implicit declaration of function 'f'
return i;
}

int f(int n) {
return n * 2;
}
Ich bekomme jedesmal, wenn ich eine Funktion innerhalb einer anderen aufrufe, dieses 'Implicit...' - Warning wie im Beispiel....

Der Code tut zwar was er soll, aber die Unterkringelungen nerven trotzdem :x

Weiß jemand, wie man die Warnings wegbekommt? Kann man die evtl in Eclipse deaktivieren?

Ich benutze Eclipse + CDT / MinGW.

Benutzeravatar
dEeP-fRiEd
Kernelcompilierer
Kernelcompilierer
Beiträge: 432
Registriert: 19. Okt 2005 00:58
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von dEeP-fRiEd » 4. Jan 2007 23:49

Hm komisch, ich hab das jetzt einfach bei mir in Eclipse/CDT reinkopiert und bei mir zeigt er die Warning nicht an.
Hab die Warning an einer anderen Stelle aber selber. Allerdings rufe ich da ne Funktion auf die ich noch nicht geschrieben habe! (Was hier ja nicht der Fall ist)

Ich hab dazu grade was gegoogelt:
Die -Wall Option schaltet alle Warnungen betreffend Syntax ein, damit wir sicher sein können, dass unser Code in Ordnung und so weit wie möglich portierbar ist. Wenn wir diese Option verwenden und unseren Code kompilieren, sehen wir etwas ähnliches wie:

game.c:9: warning: implicit declaration of function `shuffle'

Dies teilt uns mit, dass wir ein wenig mehr zu tun haben. Wir müssen eine Zeile in ein Header-File einfügen, in der wir dem Compiler alles über unsere shuffle Funktion mitteilen, damit der Compiler alles überprüfen kann, was er überprüfen soll. Es klingt lästig, aber es trennt die Definiton von der Implementation und erlaubt uns, unsere Funktion überall anders zu verwenden, indem wir einfach einen neuen Header einbinden, und zu unserem Object Code hinzulinken. Wir schreiben diese eine Zeile in unsere deck.h Datei.

void shuffle(deck_t *pdeck);

Dies beseitigt die Warn-Ausgaben.
( http://www.linuxfocus.org/Deutsch/March ... e229.shtml )

Vlt. hilft dir ja das weiter!
NOSCE TE IPSUM
visit: http://www.flicknetwork.net.tc

Benutzeravatar
Trigger
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 230
Registriert: 21. Apr 2004 19:57
Wohnort: Malchen

Beitrag von Trigger » 5. Jan 2007 00:13

Ich würde sagen, du nutzt f(), bevor du es deklarierst.
Abhilfe sollte ein "int f(int n);" vor der Funktion g() schaffen, bzw. am besten eine Header-Datei mit allen Signaturen.

Christoph-D
Computerversteher
Computerversteher
Beiträge: 325
Registriert: 11. Dez 2005 13:14
Wohnort: Darmstadt

Beitrag von Christoph-D » 5. Jan 2007 00:24

Oder die Funktionen topologisch nach ihren Abhängigkeiten sortieren (um mal einen Fachbegriff aus GdI 2 in "Anwendung" zu sehen).
"I believe in the fundamental interconnectedness of all things." (Dirk Gently)

Benutzeravatar
bruse
Kernelcompilierer
Kernelcompilierer
Beiträge: 412
Registriert: 2. Aug 2006 22:42

Beitrag von bruse » 5. Jan 2007 15:26

Oder in den C99-Modus schalten, da gehen dann auch einige andere Dinge (zB dass man Bezeichner überall deklarieren darf, nicht nur am Anfang). In C99 sind implizite Funktionsdeklarationen nämlich verboten, und einige andre Schludrigkeiten werden durch den Compiler auch gefunden. Durch die ganz oben eingesetzten //-Kommentare ist das ganze eh kein C90 mehr.

Antworten

Zurück zu „Archiv“