Help deciphering this code line

#define SBIT(name, addr, bit) __bit __no_init volatile boolean name @ (addr+bit)

I believe I understand the first part of the above line, "#define SBIT(name, addr, bit)"

But I do not understand the second part, "__bit __no_init volatile boolean name @ (addr+bit)"

What does the second part mean and what does it have to do with the first?

I've never seen a @ operator in C.

I'm guessing it's some non-standard dialect (not Arduino either) way of placing a single bit bool in a particular bit in memory.

Where did you find it?

I think it's a macro to set a bit at the specified address? Or to create a variable that represents a bit at a specific location?

Something like that. I don't think that's Arduino code though - googling the line turned it up only in code for 8051 series microcontrollers. Context suggests that it's for things like setting a single bit in an 8 bit register, which is consistent with my intuition.

Uses directives specific to one compiler I suspect...

IAR Embedded Workbench (Products | IAR) uses that kind of syntax.

__bit: “The __bit memory attribute overrides the default storage of variables given by the selected data model and places individual variables and constants in bit addressable memory. You cannot create a pointer to bit memory.”

__no_init: not initialized at startup

volatile: (standard C/C++) the value can change any time and must be loaded from memory every time it is used

boolean name: type and variable name as usual

@ (addr+bit): variable is located at given address