Hallo zusammen, ich habe Funktionen in seperate Headerdatein gepackt. bei einigen meckert der Compiler nicht und bei einigen meckert er und gibt z.B. diese Meldung aus: ../zeitsynchronisation.h: In function 'zeitsynchronisation': (Gelber Punkt)../zeitsynchronisation.h:32:5: warning: implicit declaration of function 'nachfuehrung' [-Wimplicit-function-declaration] In file included from ../Windgeschwindigkeit.c:96:0: ../nachfuehrung.h: At top level: (Gelber Punkt)../nachfuehrung.h:1:6: warning: conflicting types for 'nachfuehrung' [enabled by default] In file included from ../Windgeschwindigkeit.c:92:0: ../zeitsynchronisation.h:32:5: note: previous implicit declaration of 'nachfuehrung' was here was meint AVR Studio 4 damit? Ich bedanke mich für Euere Hilfe
Wahrscheinlich hast Du die Funktion "nachfuehrung()" 2x unterschiedlich definiert. Überprüfe mal genau die Parameter und den Rückgabewert
die Funktion nachfuehrung ist ihm nicht bekannt. Sie ist also nicht rechtzeitig deklariert.
Du hast Mist gebaut! Funktionen und Deklarationen gehören nicht in Header Dateien, nur Definitionen die von "Globalem" Interesse sind
@ Peter, selbst wenn ich die höher einbinde bringt es keine Besserung. binde ich die Headerdatei in die Headerdateien ein, wo sie benötigt wird, streigt AVR Gcc richtig (Absturz). Welche Infos brächtest du für eine richtige Fehlerdiagnose? Mit freunldichen Grüßen Balou Baer
Balou Baer schrieb: > Welche Infos brächtest du für eine richtige Fehlerdiagnose? eventuell den kompletten Quellcode?
Wenn Du eine Funktion global benutzen willst, dann machst Du es so: datei.h:
1 | void meineFunktion(void); |
datei.c:
1 | #include "datei.h" |
2 | |
3 | void meineFunktion(void) { |
4 | //tudiestudas
|
5 | }
|
oder wenn's keine globale sein soll: datei.c:
1 | static void meineFunktion(void); |
2 | |
3 | |
4 | static void meineFunktion(void) { |
5 | //tudiestudas
|
6 | }
|
@ Peter, hast du bitte eine E-Mail Adresse für mich. Der Code ist zwar nicht geheim, braucht aber nicht jeder zu sehen ;) @Dispol sorry, aber das verstehe ich so leider nicht. Mit freundlichen Grüßen Balou Baer
Balou Baer schrieb: > Peter, hast du bitte eine E-Mail Adresse für mich. Der Code ist zwar > nicht geheim, braucht aber nicht jeder zu sehen ;) dann kürze ihn so das es jeder sehen kann, sinn und zweck vom Forums ist das jeder dabei auch etwas lernen kann.
Also. Du hast eine Projekt und das willst Du nicht in eine einzige C-Datei packen, sondern in kleinere Module teilen. Deshalb legst Du nicht eine main.c an, sondern 2 (oder mehr Dateien): modul1.c modul2.c Und damit Modul2 Teile (Funktionen oder Variablen) aus Modul1 benutzen kann, legt modul1 noch eine *.h Datei an, in der steht, was es denn in modul1.c interessantes gibt. Da steht nur der Prototyp einer Funktion. Mehr nicht. Die Funktion selbst sollte NIE NIE in der h-Datei stehen. Prototyp einer Funktion geht so: Du schreibst den Funktionsnamen nochmals hin, mit Rückgabewert und Parameter, machst aber am Ende ein ";" anstatt Klammer auf ...
Ich hätte Dir ja gerne einen Link zu einem guten Tutorial geschickt. Aber ich bin enttäuscht: http://www.c-howto.de/tutorial-praeprozessor-dateien-einbinden.html
@Peter ich weiß nicht warum, aber jetzt funktioniert es. Habe AVR neu gestartet und noch einmal auf Rebuild all gedrückt. @Dispol Danke, werde ich mir durchlesen.
>Danke, werde ich mir durchlesen.
NEIN !!
Das war leider ein schlechtes Beispiel!! So sollte man es genau nicht
machen.
Balou Baer schrieb: > implicit declaration of function 'nachfuehrung' > conflicting types for 'nachfuehrung' Der Funktionsprototyp für "nachfuehrung" ist zwar vorhanden, das Symbol wird aber vorher bereits verwendet. Daher nimmt der Compiler beim ersten Auftauchen die "Standardwerte": return type "int" und keine Prüfung der Aufrufparameter. Das kollidiert dann natürlich mit dem zu spät erscheinenden Funktionsprototypen. > ../zeitsynchronisation.h:32:5: note: previous implicit declaration of > 'nachfuehrung' was here Prüfe da mal die Reihenfolge der Deklarationen. Grüße Stefan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.