next up previous
Nächste Seite: Variablen-Parameter Aufwärts: Unterschiede zu C-Schnittstellen Vorherige Seite: Unterschiede zu C-Schnittstellen

Aufzählungen und Mengen

In C finden sich oft Deklarationen wie die folgenden:

  SERB_parityOn  = 0;
  SERB_parityOdd = 1;
  SERB_sevenWire = 2;
  SERB_queuedBrk = 3;

  SERF_parityOn  = 0x0001;  ( oder auch 1«SERB_parityOn)
  SERF_parityOdd = 0x0002;  
( oder auch 1«SERB_parityOdd)
  SERF_sevenWire = 0x0004;  
( oder auch 1«SERB_sevenWire)
  SERF_queuedBrk = 0x0008;  
( oder auch 1«SERB_queuedBrk)

Im Programm steht dann die Anweisung:

  flags = SERF_parityOn | SERF_queuedBrk;

Dies heisst in viel eleganter:

  SerFlags = (parityOn, parityOdd, sevenWire, queedBrk);

  SerFlagSet = SET OF SerFlags;

Und schliesslich in der Anwendung:

  flags := SerFlagSet(parityOn, queuedBrk);

Ein Aufzählungstyp in ist gleichbedeutend mit einer Deklaration von Konstanten, die von 0 an durchnumeriert sind. Deshalb kann die C-Deklaration in einen Aufzählungstyp umgewandelt werden.

Zu beachten ist, dass nun mit der Syntaxerweiterung bei den Aufzählungstypen, beschrieben in 5.1.6, auch weitaus kompliziertere Konstantendeklarationen aus der Sprache C übernommen werden können.

Eine Menge wird so dargestellt, dass jedes Element ein Bit belegt. Das erste Element belegt Bitposition 0, das zweite Element die Bitposition 1, und so fort. Deshalb kann die zweite C-Deklaration in einen Mengentyp umgewandelt werden.

Daraus ergibt sich die Anweisung als logische Folge der Definition. Nebst der überschaubareren Schreibweise ermöglicht diese Übersetzung dem Compiler eine strengere Typenkontrolle. Die Elemente der Aufzählungs- und Mengentypen sind an ihren Typ gebunden. So sind etwa Elemente von IntuitionD.ScreenFlags und IntuitionD.WindowFlags nur an Variablen ihres Typs zuweisbar. Eine Verletzung dieser Regel wird schon vom Compiler beanstandet und nicht erst zur Laufzeit durch ,,Guru``-Meldungen.


next up previous
Nächste Seite: Variablen-Parameter Aufwärts: Unterschiede zu C-Schnittstellen Vorherige Seite: Unterschiede zu C-Schnittstellen
Claudio Nieder 2000-11-12