Ist doch ziemlich eindeutig.
Dem Compiler fehlt die Deklaration der Variable Prozessflag.
Du weisst was extern bedeutet? Wenn nicht dann gehoert es da wahrscheinlich nicht hin.
-> C-Grundlagen nochmal verinnerlichen
Hallo Leute.
beim Compilieren eines Codes bekomme ich die Fehlermeldung: undefined reference to `Prozessflag'.
Code
#include "BBB.h"
.
.
.
extern uint8_t Prozessflag;
...
if(Tastenabfrage()==1){
_delay_ms(10);
Anreiz=TasteEins;
Prozessflag|= Benutzeroberflaeche;
... }
und bei BBB.h werden die Bits eines 8Bitregisters für einzelne Prozesse reserviert.
//Prozessflags
#define Benutzeroberflaeche (1<<0)
#define Tasten (1<<1)
#define Rechnen (1<<2)
Kann mir jemand vielleicht sagen woran es liegen kann.
Danke im Voraus
Ist doch ziemlich eindeutig.
Dem Compiler fehlt die Deklaration der Variable Prozessflag.
Du weisst was extern bedeutet? Wenn nicht dann gehoert es da wahrscheinlich nicht hin.
-> C-Grundlagen nochmal verinnerlichen
Es fehlt nicht die Deklaration (die steht ja da), sondern die Definition.Dem Compiler fehlt die Deklaration der Variable Prozessflag.
Und sie fehlt nicht dem Compiler, sondern dem Linker.
Das nur mal am Rande.
MfG
Stefan
extern, weil ich Prozessflag in anderen codes benutze (bereits ausserhalb des Blocks vrwendet)
meine nächste Frage wäre, wie definiere ich Prozessflag im Linker
merci
Mach das extern weg. Das extern bedeutet, dass diese Variable irgendwo anders definiert ist.
Wenn du also von woanders auf diese Variable zugreifen willst, sollte sie dort mit extern deklariert werden. (Das macht man dann meistens in der .h Datei, in der die Variable definiert ist)
Nein, man definiert in einer Haeder-Datei keine Variablen, man deklariert sie dort nur. Definiert wird sie in einer C-Datei.(Das macht man dann meistens in der .h Datei, in der die Variable definiert ist)
Warum? Wenn man die Header-Datei in mehrere C-Dateien inkludiert, würde die Variable sonst mehrfach definiert werden. Der GCC-Linker schluckt Mehrfachdefinitionen zwar klaglos, was es aber nicht richtiger macht.
MfG
Stefan
Ja, darum wird ja auch in der .h-Datei ein extern davor geschrieben!!
Wenn also in main.c die Variable definiert ist, wird sie in main.h mit extern deklariert...
War vielleicht ein Missverständnis.
Gruß,
Thomas
Nein, es war schlicht die falsche Wortwahl deinerseits.War vielleicht ein Missverständnis.
Und da genau das das Thema hier ist (Deklaration<->Definition), sollte der Satz einfach nicht so stehen bleiben.(Das macht man dann meistens in der .h Datei, in der die Variable definiert ist)
MfG
Stefan
Ja du hast ja recht, eigentlich war das auch so gemeint:
Um mal zum Thema zurück zu kommen:Wenn du also von woanders auf diese Variable zugreifen willst, sollte sie dort mit extern deklariert werden. (Das macht man dann meistens in der .h Datei, in dessen zugehöriger .c Datei die Variable definiert ist)
Funktioniert es denn jetzt?
einwandfrei
mich verwirren auch diese Deklarationen und Definitionen.
und wie ist es mit Funktionen, werden die dann auch in header Dateien nur deklariert mit Variblen.
Z.B habe ich in einer Ccode einer Funtion
double ADkanalLesen(uint8_t mux){
...
}
definiert
sollte sie auch in der header datei deklariert werden
double ADkanalLesen(uint8_t mux);
???
Lesezeichen