Warnung "implicit declaration" in GCC



  • Hi,

    Bei der Kompilierung mit dem GCC-Compiler meldet sich eine Warnung "warning: implicit declaration of function `rtc_int_init'" für diese Zeile:

    rtc_int_init();
    

    Die Definition dieser Methode lautet:

    void rtc_int_init(void){}
    

    und befindet sich in einer anderen Quelldatei.
    Was ist das Problem und wie behebt man diese Warnung?

    Gruss
    Campus



  • oh man.... 🙄



  • Wenn sie sich in einer anderen Quelldatei befindet, dann ist sie in der betreffenden Datei nicht bekannt. Darum nimmt der Compiler bei dieser unbekannten Funktion implizit an, dass sie einen int-Wert zurückgibt. Du musst die Funktion bekannt machen. Das macht man üblicherweise durch den Header, in dem die Deklaration (der Prototyp) der Funktion steht.



  • ascda schrieb:

    oh man.... 🙄

    Hör auf, ständig auf den Anfängern rumzuhacken! Das nervt langsam. Als ob du anfangs keine Fehler gemacht hättest. Was bringt dir das eigentlich, solche Kommentare abzulassen? Wir sind doch nicht mehr in der Grundschule... Oder bist du das vielleicht doch noch? Nee nee, lass mich raten: 9. Klasse, Differenzierung Informatik/Mathe! Richtig? 😃



  • nein sorry tech.inf. m.sc.

    ich habe nichts gegen leute, die vernünftige fragen stellen, aber solche sachen kann er auch rausfinden, wenn er sie in google eingibt und das erste suchergebnis anklickt. wer nicht lernt, selbstständig zu arbeiten, der wird nie programmieren lernen. ich will lediglich daß die leute erst selber nachdenken und suchen und DANN fragen nicht anders herum.



  • ascda schrieb:

    ich will lediglich daß die leute erst selber nachdenken und suchen und DANN fragen nicht anders herum.

    Ja, ist ja auch verständlich, aber warum sagst du das dann nicht? "Oh mann"-Posts bringen keinen weiter...

    Um's mit deinen Worten zu sagen: 🙄

    😃



  • vielen Dank.
    Ich habe eine externe Deklaration gemacht:

    extern void rtc_int_init(void);
    

    und die Warnung ist weg. Ist das nicht einfacher als eine Header-Datei?

    Gruss
    Campus



  • Campus schrieb:

    vielen Dank.
    Ich habe eine externe Deklaration gemacht:

    extern void rtc_int_init(void);
    

    und die Warnung ist weg. Ist das nicht einfacher als eine Header-Datei?

    Gruss
    Campus

    Kann man auch machen. Die Frage ist nur, wie sinnvoll das letztlich ist. Bei einer Funktion mag dir das noch einfacher vorkommen, den Prototypen einfach nochmal in der Datei, in der die Funktion benötigt wird, zu notieren. Aber was ist, wenn du 10 oder 50 Funktionen hast? Willst du dann alle Prototypen doppelt notieren? Ist da nicht ein #include "myheader.h" sinnvoller? Und was ist mit Typendeklarationen o.ä.? Nee nee, gewöhn dir lieber an, Header zu schreiben und zu nutzen. Das brauchst du sowieso...

    EDIT: Ich meine, man kann das extern-Schlüsselwort sogar weglassen, da du ja nur über's Kompilieren hinaus kommen willst und der Linker die passende Defnition sowieso in der anderen Objektdatei findet. Bin mir aber nicht scher, kannst du bei Interesse ja mal ausprobieren.


Log in to reply