Существует определение макроса:
#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family
, поэтому __SOCKADDR_COMMON (sin_);
фактически расширяется до sa_family_t sin_family;
. Это происходит так, что макрос принимает параметр sa_prefix и использует ##
оператор для объединения (присоединения) их.В результате у вас есть новая переменная sin_family
, которая объявлена с типом sa_family_t
в структуре.
Подробнее о макросах и препроцессоре C