Gast
#548827
Hi, ich habe bei dieser Art von Struktur Probleme. Ich versteh nicht ganz was das soll bzw. wie das funktioniert?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
|
Anzeige
|
Hilfe zu Strukturtyp
Gast
#548827
Hi, ich habe bei dieser Art von Struktur Probleme. Ich versteh nicht ganz was das soll bzw. wie das funktioniert?
Table[] ist ein Array aus Elementen des selbstgemachten Typs PAGE_ENT.
Der selbstgemachte Typ PAGE_ENT ist mit typedef definiert.
Der Typ PAGE_ENT besteht aus einer Struktur, die drei Strukturelemente
hat - einen char* Zeiger, einen void* Zeiger und noch einen char* Zeiger
Das Array wird Table[] beim Anlegen mit Werten vorgefüllt.
Für jedes gewünschte Element vom Typ PAGE_ENT müssen die Daten der
Struktur eingetragen werden.
Die Daten der Struktur trägt man ein, in dem man die einzelnen
Strukturelemente einträgt, drei Stück pro Struktur.
Beim 3. bzw. 4. Element hat der Autor geschludert und nur ein
Strukturelement eingetragen. Die anderen werden vom Startupcode
automatisch auf 0 gesetzt.
Mit ein paar Klammern würde es sauberer aussehen ;-)
typedef struct
{
char *fnamep;
void *ptr;
char *linknamep;
} PAGE_ENT;
PAGE_ENT Table[] ={
{ "seite1.htm", (void *) Function1, NULL },
{ "seite2.htm", (void *) Function2, NULL },
#ifdef PASSWORT
{ "x.htm", (void *) xyz, NULL },
#endif
NULL
};
Gast
#549078
Hi Stefan B, was meinst du damit? >>Beim 3. bzw. 4. Element hat der Autor geschludert und nur ein >>Strukturelement eingetragen. Die anderen werden vom Startupcode >>automatisch auf 0 gesetzt. In solchen Fällen lohnt ein Blick in das Assemblerlisting. Hier der kompilierfähige Testfall "jens.c"
Statt der letzten NULL habe ich zwei von drei Werten der letzten
Struktur eingetragen {1,2,nix}. Was macht der Compiler aus nix?
Mit dem GCC wird das so "gcc -S jens.c -o jens.s" zu einem
Assemblerlisting übersetzt (hier für ein Target PC)
D.h. Der GCC lässt bei der <==== markierten Stelle eine 4 Bytes grosse Lücke im Code. Was in der Lücke steht, kann das GNU Assembler Manual klären http://www.gnu.org/software/binutils/manual/gas-2.9.1/html_node/as_124.html#SEC126 D.h. die Lücke wird, da kein anderes Füllbyte angegeben ist, mit 0 gefüllt. Ich habe mich geirrt - kein anderer Programmcode (insbesondere auch kein Startupcode) ist nötig, um die unvollständig angegebene Strukturelemente in Table[] auf 0 zu setzen. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|