Felder mit variablen Größen werden in C nicht direkt unterstützt.
In klassischem C ist ein Feld mit einem Pointer identisch, daher kannst du malloc() bzw. realloc() verwenden, um dein Feld zur Laufzeit zu deklarieren.
while( found_device() )
{
num_devices++;
feld = realloc(feld, num_devices*sizeof(dev_struct));
feld[num_devices] = get_dev_infos();
}
ähnlich so.
Listenstrukturen sind auch möglich, die Frage ist an der Stelle, wieviele Einträge das Teil haben wird. Wenn die Inhalte recht statisch bleiben, dann sind in jedem Fall Felder vorzuziehen (Speichereffizienz, Suchzeiten, keine komplizierte Pointerarithmetik). In Listen lässt sich dafür das Hinzufügen/Entfernen sehr effizient implementieren.
Abstrahiert ihr eigentlich verschiedene Bussysteme? Eventuell ist das sinnvoll, dann könnte man Treiber für eine Hardware nämlich für verschiedene Geräte verwenden (mir fällt die NE2000 ein - als ne2000 [ISA], ne2k [PCI], ne/2 [MCA] und in diversen PCMCIA-Karten...) Vergleiche dazu NetBSD.
Gruß,
Svenska