Я начал читать комментарий Льва на Unix v6. Я наткнулся на эти фрагменты, которые я никогда не видел в языке Си. Автор дает какое-то объяснение, но может ли кто-нибудь объяснить мне, что здесь происходит?
params.h
:
SW 0177570
......
struct { int integ; };
и это используется в unix/prf.c
if(SW->integ == 0)
Объяснение автора
SW
предварительно определено как значение
0177570. Это адрес ядра
регистр процессора только для чтения, в котором хранится
настройка регистра переключателя консоли.
Смысл утверждения ясен: получить
содержимое в месте 0177570 и посмотреть, если они
ноль. Проблема заключается в том, чтобы выразить это в
C. Код if (SW == 0)
не передал бы это значение. очевидно
SW
- значение указателя, которое должно быть
разыменовываются. Компилятор мог быть
изменил принять
if (SW-> == 0)
но в нынешнем виде это синтаксически неверно. Изобретая фиктивную структуру, с
элемент integ
, программист нашел удовлетворительное решение
его проблема.
Мой вопрос, в основном, как это работает? Когда компилятор видит SW->integ
, как он связывает SW
с анонимной структурой?