Estruturas anônimas em C encontradas no Unix Kernel
Comecei a ler o Comentário Leonístico sobre o Unix v6. Me deparei com esses trechos, que nunca vi usados na linguagem C. O autor fornece algum tipo de explicação, mas alguém poderia me explicar o que está acontecendo aqui?
params.h
:
SW 0177570
......
struct { int integ; };
e isso usado emunix/prf.c
if(SW->integ == 0)
Explicação do autor
SW
é definido anteriormente como o valor 0177570. Este é o endereço do kernel de um registro de processador somente leitura que armazena a configuração do registro de chave do console. O significado da instrução é claro: obtenha o conteúdo no local 0177570 e veja se eles são zero. O problema é expressar isso em C. O códigoif (SW == 0)
não teria transmitido esse significado. ClaramenteSW
é um valor de ponteiro que deve ser desreferenciado. O compilador pode ter sido alterado para aceitarif (SW-> == 0)
mas, como está, isso é sintaticamente incorreto. Ao inventar uma estrutura fictícia, com um elementointeg
, o programador encontrou uma solução satisfatória para seu problema.
Minha pergunta é principalmente como isso funciona? Quando o compilador vêSW->integ
, como ele associaSW
com a estrutura anônima?