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
Gast
#2497791
Werner Freytag schrieb: > #ifndef HEADER_H > #define HEADER.h > ......... > #endif" wirklich? oder doch:
1 | |
2 | |
3 | |
4 | |
Gast
#2497810
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 | |
2 | |
3 | |
mod1.h, mod2.h beliebig Definitionen, geklammert wie oben beschrieben mod1.c:
1 | |
2 | |
mod2.c:
1 | |
2 | |
main.c:
1 | |
2 | |
Hallo jw, jw schrieb: > Werner Freytag schrieb: >> #ifndef HEADER_H >> #define HEADER.h >> ......... >> #endif" > > wirklich? > oder doch: >
1 | |
2 | |
3 | |
4 | |
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
Gast
#2498113
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.
Gast
#2498123
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.