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
Werner Freytag schrieb: > #ifndef HEADER_H > #define HEADER.h > ......... > #endif" wirklich? oder doch:
1 | #ifndef HEADER_H
|
2 | #define HEADER_h // <-----!!!!!
|
3 | .........
|
4 | #endif
|
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 |
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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.