Frage Struct, das scheinbar keine Instanzen in Unix v6 definiert


Ich gehe den Code der Unix-Version 6 mit dem Buch des Löwen durch. Eine der Header-Dateien (param.h, kann zugegriffen werden Hier) definiert die folgenden Strukturen:

/*struct to access integers*/

/*single integer */
struct { int integ; };

/*in bytes*/
struct { char lobyte; char hibyte; };

Diese Strukturen scheinen keine Instanz zu definieren, noch werden sie benannt, so dass sie später verwendet werden können. Weiß jemand, was ist ihre Verwendung?

Vielen Dank


5
2017-08-29 10:29


Ursprung


Antworten:


Wenn jemand die gesamte Datei in eine Vereinigungsdeklaration einbaute, würde es ihnen ermöglichen, auf die verschiedenen Teile zuzugreifen.

Es wäre etwas wie:


  union{
   #include <param.h>
  } myparam;

  myparam.integ = 0xDEAD;
  assert(myparam.lobyte == 0xAD)
  assert(myparam.hibyte == 0xDE)

(Hängt von der Endianz der Architektur ab ...)

Wenn man sich also ein wenig umgeschaut hat, scheint es, dass man in alten Versionen von C die Union nicht erklären musste; Es gab nur einen Namespace für alle struct / union-Member, die nur in einen Byte-Offset übersetzt wurden, den Sie für jede Variable verwenden konnten. Die beste Erwähnung, die ich finden könnte, ist hier: http://docs.sun.com/source/806-3567/compat.html  Beschreibung von vor ISO Sun C:  

 Erlaubt Struct-, Union- und Arithmetik-Typen mit Member-Selection-Operatoren ('.', '->') an Membern anderer Struct (s) oder Unionen zu arbeiten.


5
2017-08-29 11:16



Damals hatten die Mitglieder von Strukturen alle denselben Namespace, nicht einen Namespace pro Struktur. Folglich musste jedes Element einer Struktur über alle Strukturen hinweg einen eindeutigen Namen haben, oder das gleiche Element musste mit demselben Typ in jeder Struktur, in der es auftrat, mit dem gleichen Offset angezeigt werden. Ganz so, wie das mit diesen verwendet wurde, bin ich mir nicht sicher, aber ich vermute, du könntest Folgendes tun:

int x;

x.lobyte = 1;
x.hibyte = 2;

Oder etwas Analoges dazu.

Siehe auch:

(Keine dieser Fragen scheint jedoch diese Frage zu beantworten.)


1
2017-09-25 02:34