Was bedeutet diese Warnung?

#3945818
Lesenswert?

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
Gast #3945860
Lesenswert?

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
   }
Gast #3945870
Lesenswert?

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 ...
#3945970
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren