Hallo Sisor,
kann es sein, dass Du FlowCalc.h nicht in FlowCalc.c inkludierst?
Also der GCC schreit normalerweise (oder spätestens bei -Wall) wenn eine Variable zuvor anders deklariert wurde, als sie dann später definiert wird.
Gruss
Chris
Hallo Sisor,
kann es sein, dass Du FlowCalc.h nicht in FlowCalc.c inkludierst?
Also der GCC schreit normalerweise (oder spätestens bei -Wall) wenn eine Variable zuvor anders deklariert wurde, als sie dann später definiert wird.
Gruss
Chris
Was man immer macht, ist, dass man eine Include-Datei, in die zugehörige C-Datei inkludiert.
In Deinem Beispiel also FlowCalc.h in FlowCalc.c, eben genau um solche Fehler aufzudecken (Ich selbst habe den IAR-Compiler noch nie benutzt, aber auch der sollte dann meckern.).
Ausserdem schreibt man in eine H-Datei immer Guards, für den Fall das man aus Versehen sie mehrmals inkludiert - was ohne Guards wieder zu Fehlermeldungen führt.
Also fuer FlowCalc.h:
Code:#ifndef _FlowCalc_h_ #define _FlowCalc_h_ /* Hier kommen jetzt alle defines, Deklarationen etc. */ #endif
Das habe ich bisher nur gemacht, wenn es wirklich nötig war und dann habe ich die entsprechenden "Guards" gesetzt.Was man immer macht, ist, dass man eine Include-Datei, in die zugehörige C-Datei inkludiert.
Wuste garnicht, dass die so heissen.
Okay, dann werde ich meinen Stil ab jetzt ändern, damit der Compiler mögliche Konflikte auch aufdecken kann.
Man lernt nie aus. Ich danke Dir.
Siro
Hallo Chris,
Du musst das so betrachten.
1. Man schreibt irgendein Modul, welches teilweise Funktionen bereit stellt, welche aus anderen Modulen benutzt werden können.
2. Man schreibt zu diesem Modul eine Header-Datei, welche alles enthält, was zum externen Aufruf benötigt wird. Also natürlich die Funktionen, aber auch öffentliche Konstanten und Variablen-Konstrukte.
3. Überall wo dann dieses Modul verwendet werden soll, wird die Header-Datei includiert.
4. Damit der Compiler auch überprüfen kann, dass Header und Modul zusammenpassen, includiert man diese auch im Modul!
5. Alle Funktionen welche in dem Modul nicht öffentlich sein sollen, declariert man als static, dann kann diese auch der Linker nicht finden und man darf die selben Namen auch in einem anderen Modul verwenden.
So wird der Code auch für andere übersichtlicher, besonders wenn man etwas anpassen muss:
Alle Funktionen und Variablen welche als static deklariert sind, kann man problemlos anpassen ohne auf Aufrufe aus anderen Modulen acht geben zu müssen.
Alles was öffentlich verwendet wird ist in der Header-Datei und der Compiler kann überprüfen ob es passt.
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Lesezeichen