Анонимные структуры в C найдены в ядре Unix

Я начал читать комментарий Льва на 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 с анонимной структурой?

Ответы на вопрос(1)

Решение Вопроса

integ) в одном пространстве имен вместо создания пространства имен в соответствии сstruct тип. Они также не различаютstruct указатели иint указатели, так что каждый указатель имеетinteg поле, соответствующее его первомуsizeof(int) байт. посколькуinteg это первое значение вstruct и имеет типint, SW->integ соответствует*((int *)SW).

 Fred Foo07 окт. 2010 г., 13:42
В современном C мы бы использовалиint * const SW = 0177570; Но до появления оптимизаторов это стоило бы Кену и его группе дорогих двух байтов :)

Ваш ответ на вопрос