Anonyme Strukturen in C im Unix-Kernel gefunden
Ich habe begonnen, den Lions-Kommentar zu Unix v6 zu lesen. Ich bin auf diese Schnipsel gestoßen, die ich in der C-Sprache noch nie gesehen habe. Der Autor gibt mir eine Erklärung, aber kann mir jemand erklären, was hier passiert?
params.h
:
SW 0177570
......
struct { int integ; };
und dies verwendet inunix/prf.c
if(SW->integ == 0)
Erklärung des Autors
SW
wurde zuvor als Wert 0177570 definiert. Dies ist die Kernel-Adresse eines Nur-Lese-Prozessorregisters, in dem die Einstellung des Konsolen-Umschaltregisters gespeichert ist. Die Bedeutung der Anweisung ist klar: Rufen Sie den Inhalt an Position 0177570 ab und prüfen Sie, ob er Null ist. Das Problem ist, dies in C auszudrücken. Der Codeif (SW == 0)
hätte diese Bedeutung nicht vermittelt. DeutlichSW
ist ein Zeigerwert, der dereferenziert werden sollte. Der Compiler wurde möglicherweise so geändert, dass er @ akzeptierif (SW-> == 0)
aber so wie es ist, ist dies syntaktisch falsch. Durch die Erfindung einer Dummy-Struktur mit einem Elementinteg
, der Programmierer hat eine zufriedenstellende Lösung für sein Problem gefunden.
Meine Frage ist vor allem, wie funktioniert das? Wenn der Compiler @ sieSW->integ
, wie verbindet esSW
mit der anonymen Struktur?