Hallo
Weiss wirklich niemand, wie man folgendes in ein Header File main.h
verpackt.
Mein main.c lautet folgendermassen:
struct drink1 {
unsigned char menge_orangensaft;
unsigned char menge_vodka;
}drink_screwdriver={12,4};
void main (void)
{
Programm...
}
ich habe nun daraus folgendes main.h file gemacht:
#ifndef main_h
#define main_h
extern struct drink1 {
unsigned char menge_orangensaft;
unsigned char menge_vodka;
}drink_screwdriver;
#endif
leider habe ich laufend errormeldungen. Weiss jemand, wie man eine
Struktur im Header File implementiert??
drink1 ist der Strukturname und drink_screwdriver der Variabelname der
Struktur...
Bitte helft mir
Danke
Du musst ein typedef machen.
also
typedef struct
{
unsigned char menge_orangensaft;
unsigned char menge_vodka;
}drink1;
und dann
drink1 drink_screwdriver;
extern verwendest du nur wenn die Variable woanders definiert ist, hier
jedoch nicht.
noch eine frage:
Das "drink1 drink_screwdriver;" kommt dan ins headerfile und es ist
richtig,dass das extern weggelassen werden muss, auch wenn ich es in
anderen c files im gleichen projekt auch noch verwende?
danke
Das "drink1 drink_screwdriver;" kannst du hintun wo du willst.
Normalerweise macht man das Typedef ins Headerfile.
In genau einem File machst das "drink1 drink_screwdriver;", in
allen anderen Files dann (wenn du die Variable dort brauchst) ein
extern drink1 drink_screwdriver;
dies funktioniert bei mir nicht so toll.
Also, hab folgendes gemacht:
im main.c steht folgendes:
typedef struct drink1 {
unsigned char menge_orangensaft;
unsigned char menge_vodka;
}drink_screwdriver={12,4};
drink1 drink_screwdriver;
void main(void)
{
programm...
}
im headerfile main.h steht folgendes:
extern drink1 drink_screwdriver;
wieso läuft es immer noch nicht??
Hallo Mike,
andersherum wird da wohl besser ein Schuh draus:
--------------------------main.h-------------------------------------
#ifndef main_h
#define main_h
typedef struct drink1 {
unsigned char menge_orangensaft;
unsigned char menge_vodka;
};
#endif
-------------------------main.h---------------------------------------
-------------------------main.c---------------------------------------
#include "main.h"
drink1 drink_screwdriver = {12,4};
void main(void)
{
programm...
}
------------------------main.c----------------------------------------
mit dem Aufruf:
typedef struct drink1 {
unsigned char menge_orangensaft;
unsigned char menge_vodka;
}drink_screwdriver={12,4};
Hast du IMHO etwas anderes gemacht. Du hast sowohl eine structure
drink1 als auch eine structure drínk_screwdriver generiert, letzte hat
defaultmäßig die Werte 12, 4.
Die Hauptfrage ist noch, welche Art von compiler Du benutzt.
Es kann Dir bei diesem Aufruf passieren, das nur drink1 als structure
erzeugt wird, oder nur drink_screwdriver oder beide.
Falls Dein Compiler im singlepass Modus arbeitet, erzeugt er drink1,
falls er den Multipassmodus kennt, erzeugt er drink_screwdriver und
gegebenfalls auch drink1.
Also kurz, Du hast zwei Strukturen erzeugt, die bis auf die
Initialisation identisch sind, aber keine Variable erzeugt. Somit
kannst Du auch mit der structure nicht arbeiten.
Entweder verwende bitte:
typedef struct <Typ> { ..... };
oder
typedef struct { .... } <Typ>;
Der Aufruf ist dabei Compilerabhängig. Standartconformer ist der
erste!
Gruß
Marcus
PS: Versuch mal bitte den oberen code.
also marcus
würde dies gerne probieren, jedoch komme ich nicht ganz draus, was du
mir da erzählen willst.
Kannst du mir bitte in das untenstehende eintragen, wie das aussehen
soll?:
--------------------------main.h-------------------------------------
#ifndef main_h
#define main_h
#endif
-------------------------main.h---------------------------------------
-------------------------main.c---------------------------------------
#include "main.h"
void main(void)
{
programm...
}
@mike:
Mein Beispiel war schon richtig, aber du hast es falsch abgetippt.
typedef definiert dir eine structur mit einem namen, aber es ist
deswegen noch kein Speicher reserviert.
typedef
{ int a;
int b;
} mystruct;
sagt dem Compiler nur wie die Struktur mystruct aussieht;
mystruct abc;
erzeugt eine Variable abc die eine Struktur hat wie sie in mystruct
definiert ist, es geht also (glaub ich):
mystruct abc{1,2};
aber nicht so wie du es geschrieben hast.
Hallo Mike,
ich habe mit den Code von Deinem Posting von 15:48h angeschaut.
Fritz und ich haben Dir im Grunde - unabhängig - den selben code
geschickt.
Fritz erzeugt die structure ohne dem Compiler expliziet zu sagen, das
es sich um eine structure handelt, ich sags ihm nochmal expliziet. Ist
Geschmackssache!
Den Code von Fritz habe ich irgendwie überlesen - Sorry Fritz!
ok, ich habe folgendes programmiert:
--------------------------main.h-------------------------------------
#ifndef main_h
#define main_h
typedef struct {
unsigned char menge_orangensaft;
unsigned char menge_vodka;
}drink1 ;
#endif
-------------------------main.h---------------------------------------
-------------------------main.c---------------------------------------
#include "main.h"
drink1 drink_screwdriver = {12,4};
void main(void)
{
programm...
}
------------------------main.c----------------------------------------
Nun beschwert sich der compiler in den anderen xxx.c files in meinem
projekt, "Error[Pe020]: identifier "drink_screwdriver" is
undefined
"
Ich habe in jedem anderen xxx.c file im kopf oben
#include "main.h" geschrieben, somit sollte er die structur doch
kennen.....
Im anderen C File musst noch reinschreiben:
extern drink1 drink_screwdriver;
dann kennt er es. Mit dem Includefile kennt er nur die Struktur als
Type , aber nicht die Variable.
aber wenn ich in verschiedenen anderen c files auf diese struktur
zugriff haben soll, kann ich das extern drink1 drink_screwdriver doch
auch ins headerfile des main.h schmeissen?oder?
oder muss ich in jedem xxx.c file das extern implementieren?
Ist eigentlich egal, aber:
Ein File muss es ohne extern haben, die anderen mit extern.
Ich mach die extern variablen nie in den Header, sondern trage ins .c
File nur die Variablen ein, die ich da auch verwende. Dann hab ich auch
eher den Überblick.
ja, im main.c habe ich ja folgendes geschrieben
drink1 drink_screwdriver{15;3};
nun kann ich also ins main.h file "extern drink1 drink_screwdriver"
schreiben zuzüglich dem typdef struct.... und dieses in den funktionen,
bei welchen ich auf drink_screwdriver zugreiffen muss das main.h
includen, oder???
Die Typedef auf jeden Fall.
das "extern..." sollte aber nicht im main.c includiert sein, ich
weiss nicht ob das der Compiler frisst. Sonst musst es für main.c über
#ifdef rausnehmen.
Einfach nachdenken und ausprobieren, du willst ja das Programm
schreiben , nicht ich.
Eine eigene Frage?
Dieser Thread ist über 22 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.