## family是什么意思?

时间:2015-01-29 22:35:36

标签: c++ c sockets

我正在查看sockaddr.h中的以下socket api代码,它的定义为

#define  __SOCKADDR_COMMON(sa_prefix) \   
sa_family_t sa_prefix##family

这个#define是如何工作的?

2 个答案:

答案 0 :(得分:2)

##是C中的宏标记连接(或token pasting)运算符。


这意味着

#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix family

__SOCKADDR_COMMON(foo);

将扩展为

sa_family_t foo family

会导致编译错误,而不是正确地扩展到

sa_family_t foofamily
没有它。


为什么需要 ##运算符?简单;你不能sa_prefixfamily,因为它本身就变成了一个宏令牌(一个未定义的令牌)。

答案 1 :(得分:0)

__SOCKADDR_COMMON(sa_prefix) #define d的方式,

__SOCKADDR_COMMON(foo)扩展为字符串sa_family_t foofamily