This is the piece of the code I copied from one of the header file for socket programming.
/* Structure describing an Internet socket address. */
struct soc
There exists the macro definition:
#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family
so __SOCKADDR_COMMON (sin_); actually expands to sa_family_t sin_family;
The way this happens is that the macro takes the parameter sa_prefix and uses the ## operator to concatenate (join) them. The result is that you have a new variable sin_family which is declared with type sa_family_t in the struct.
Here's more info on macros and the C Preprocessor