Forum: Compiler & IDEs Fehlermeldung in WINAVR


von Werner F. (frewer)


Lesenswert?

Hallo,

hoffentlich bin ich im richtigen Forum zum Thema WINAVR bzw Studio4. Da 
ich noch im "C-Anfang" bin, habe ich folgende Fragen:

1.  Was bedeutet die Warnung < implicit declaration of function >?
In einem Modul zB "name.c" steht eine Funktion zB "void funktion(void)", 
die in einem anderen Modul zB "Hauptprogramm.c" benutzt wird. Ich habe 
nun in Hauptprogramm eine Header-Datei "name.h" eingebunden und in 
"name.h" einen Funktionsprototypen "void funktion(void)" definiert. 
Trotzdem meldet der Compiler die Warnung.

2. Ich verwende in den Header-Files stets am Beginn die Abfrage
   "#ifndef HEADER_H
     #define HEADER.h
    .........
    #endif"
   Nun die Frage: Wenn ich mehrere solcher Header-Files habe, reicht es 
dann sozusagen alle Headerfiles im Headerfile des Hauptprogramms (mit 
der main.c) per #include... zu definieren? Oder müssen zu jedem Modul 
"xx.c" die entsprechenden HeaderFiles als #includes angemeldet werden? 
Ich verstehe, dass durch den ifndef Aufruf sowieso der entsprechende 
Header nur 1mal aufgerufen wird und dann allen Programmteilen zur 
Verfügung steht.

Danke im Voraus
frewer

: Verschoben durch Moderator
von jw (Gast)


Lesenswert?

Werner Freytag schrieb:
>    #ifndef HEADER_H
>      #define HEADER.h
>     .........
>    #endif"

wirklich?
oder doch:
1
    #ifndef HEADER_H
2
      #define HEADER_h     // <-----!!!!!
3
     .........
4
    #endif

von jw (Gast)


Lesenswert?

1. das bedeutet, daß die Prototyp-Definition nicht inkludiert wurde
2. C kennt nicht "Hauptsource.c" und "Nebensource_<n>.c". Jede .c Datei 
ist eine Übersetzungseinheit und braucht alle Includes mit den 
Prototypen der verwendeten Funktionen.
"braucht" im Sinne von "damit die Syntaxprüfung auch was taugt" und 
nicht weil es sonst nicht ginge.

z.B.:
main_include.h:
1
#include  "mod1.h"
2
#include  "mod2.h"
3
#include  "main.h"

mod1.h, mod2.h beliebig Definitionen, geklammert wie oben beschrieben

mod1.c:
1
#include  "main_mod.h"
2
... // implement mod1 functions / use mod1/mod2 functions/globals
mod2.c:
1
#include  "main_mod.h"
2
... // implement mod2 functions / use mod1/mod2 functions/globals
main.c:
1
#include  "main_mod.h"
2
... // implement main() / use mod1/mod2 functions/globals

von Werner F. (frewer)


Lesenswert?

Hallo jw,

jw schrieb:
> Werner Freytag schrieb:
>>    #ifndef HEADER_H
>>      #define HEADER.h
>>     .........
>>    #endif"
>
> wirklich?
> oder doch:
>
1
>     #ifndef HEADER_H
2
>       #define HEADER_h     // <-----!!!!!
3
>      .........
4
>     #endif
5
>

nur hier ein Tippfehler. In Wirklichkeit habe ich den Unterstrich.

zu Deinem 2ten Kommentar:

1. Ich bin hergegangen und habe im Hauptprogramm.c eine Headerdatei 
"Haupt.h" mit #include eingebaut und in dieser Headerdatei alle weiteren 
Headerdatei "inkludiert". Geht das oder muss ich im Hauptprogramm selbst 
alle Headerdateien "inkludieren".

2. Dein Kommentar heißt dann für mich, dass ich in jedem Modul die 
benötigen Headerdateien mit den Funktionsprototypen inkludieren muß 
(ganz schön aufwendig). Habe ich das richtig verstanden?

Vielen Danke zunächst
mfg frewer

von jw (Gast)


Lesenswert?

GNU sagt über den CPP:
> Nesting levels of `#include' files.
> We impose an arbitrary limit of 200 levels, to avoid runaway recursion.
> The standard requires at least 15 levels.

Andere Compiler sollten mindestens die 15 liefern, mehr ist wohl eh 
nicht wirklich überschaubar.

von jw (Gast)


Lesenswert?

Werner Freytag schrieb:
> 2. Dein Kommentar heißt dann für mich, dass ich in jedem Modul die
> benötigen Headerdateien mit den Funktionsprototypen inkludieren muß
> (ganz schön aufwendig). Habe ich das richtig verstanden?

deshalb alles Notwendige ein einem Include zusammenfassen. Man kann 
natürlich auch ein globales Include haben, das alles Global definiert, 
und jedes Modul hat noch mal ein lokales Include für Definitionen, die 
nur in dem Modul benötigt werden. Aber da laufen sicher die Meinungen 
auseinander.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Werner Freytag schrieb:
>...
> hoffentlich bin ich im richtigen Forum zum Thema WINAVR bzw Studio4.
>...
War nicht im richtigen Forum.

Fragen zu WinAVR
-> Forum gcc

Fragen zu AVR Stuido
-> Forum Mikrocontroller & Elektronik für allgemeine Fragen
-> Forum gcc für Fragen im Zusammenhang mit der Anwendung des 
GNU-Compilers unter AVR Studio.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Martin Thomas schrieb:

> Fragen zu AVR Stuido
> -> Forum Mikrocontroller & Elektronik für allgemeine Fragen
> -> Forum gcc für Fragen im Zusammenhang mit der Anwendung des
> GNU-Compilers unter AVR Studio.

Ggf. auch Forum PC Hard- und Software, falls es eher um Komplikationen
mit der Installation selbst oder irgendwelchen damit zusammenhängenden
Treibern oder dergleichen geht.

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
Noch kein Account? Hier anmelden.