This question already has answers here:
Closed 4 years ago.
#define f(g,g2) g##g2
(5个答案)
我正在查看sockaddr.h中的以下socket api代码,其中定义为
如何定义工作?
会扩展到
这将导致编译错误,而不是正确地扩展到
没有它。
不过,你为什么需要
(5个答案)
我正在查看sockaddr.h中的以下socket api代码,其中定义为
#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family
如何定义工作?
最佳答案
##
是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
,因为它本身就是一个宏标记(一个未定义的标记)。关于c++ - ## family是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28225972/