Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C FD ISSET宏函数是如何工作的_C_Linux_Macros - Fatal编程技术网

C FD ISSET宏函数是如何工作的

C FD ISSET宏函数是如何工作的,c,linux,macros,C,Linux,Macros,sys/select.h中有一个宏定义,它是GNUC库的一部分,如下所示 #define __FD_ISSET(d, set) \ ((__FDS_BITS (set)[__FD_ELT (d)] & __FD_MASK (d)) != 0) 有人能解释一下第二行实际上是如何扩展的以及它是如何工作的吗? __FDS_位/_FD_ELT/_FD_掩码在哪里定义?(它们是自己的宏吗?在我的系统(Debian/GNU Linux)上,定义如下: # define __FDS_BITS(s

sys/select.h中有一个宏定义,它是GNUC库的一部分,如下所示

#define __FD_ISSET(d, set) \
  ((__FDS_BITS (set)[__FD_ELT (d)] & __FD_MASK (d)) != 0)
有人能解释一下第二行实际上是如何扩展的以及它是如何工作的吗? __FDS_位/_FD_ELT/_FD_掩码在哪里定义?(它们是自己的宏吗?

在我的系统(Debian/GNU Linux)上,定义如下:

# define __FDS_BITS(set) ((set)->__fds_bits)
#define __FD_ELT(d) ((d) / __NFDBITS)
#define __FD_MASK(d)    ((__fd_mask) 1 << ((d) % __NFDBITS))
#定义uu FDS_位(set)((set)->u FDS_位)
#定义FD ELT(d)((d)/(NFDBITS)
#在我的系统(Debian/GNU Linux)上定义uu FD_MASK(d)((u FD_MASK)1,定义如下:

# define __FDS_BITS(set) ((set)->__fds_bits)
#define __FD_ELT(d) ((d) / __NFDBITS)
#define __FD_MASK(d)    ((__fd_mask) 1 << ((d) % __NFDBITS))
#定义uu FDS_位(set)((set)->u FDS_位)
#定义FD ELT(d)((d)/(NFDBITS)

#定义uu FD_MASK(d)((u FD_MASK)1什么是真的。你可以用你的问题来添加缺少的部分。什么是真的。你可以用你的问题来添加缺少的部分。什么是真的。你可以用你的问题来添加缺少的部分。谢谢你的回答,你在哪里找到定义(在哪个头文件中)?在我的Debian amd64上,它位于/usr/include/x86_64-linux-gnu/sys/select.h和/usr/include/x86_64-linux-gnu/bits/select.hBTW中,通过询问它是如何扩展和如何工作的,我正在寻找C中的宏规则在这里是如何应用的;我无法理解第二行中使用的宏链是如何扩展的?宏通过替换来工作的,例如,您可以替换“uu FDS_BITS(set)”和“((set)->u FDS_BITS)”。例如“#定义u FD_set(d,set)((void)((void)(u FDS_BITS(set)[u FD_ELT(d)=u FD_掩码(d))”也可以写为“#定义FD_uset(FD,fdsetp)((void)((fdsetp)->u FDS)/(FD)=(FD)=nfu)“等等,还有uu NFDBITS、uu FD_MASK等等。感谢您的回复,您在哪里找到了定义(在哪个头文件中)?在我的Debian amd64上,它位于/usr/include/x86_64-linux-gnu/sys/select.h和/usr/include/x86_64-linux-gnu/bits/select.hBTW中,通过询问它是如何扩展和如何工作的,我正在寻找C中的宏规则在这里是如何应用的;我无法理解第二行中使用的宏链是如何扩展的?宏通过替换来工作的,例如,您可以替换“uu FDS_BITS(set)”和“((set)->u FDS_BITS)”。例如“#定义u FD_set(d,set)((void)((void)(u FDS_BITS(set)[u FD_ELT(d)=u FD_掩码(d))”也可以写为“#定义FD_uset(FD,fdsetp)((void)((fdsetp)->u FDS)/(FD)=(FD)=nfu)“等等,还有uu NFDBITS、uu FD_MASK等等。感谢您的回复,您在哪里找到了定义(在哪个头文件中)?在我的Debian amd64上,它位于/usr/include/x86_64-linux-gnu/sys/select.h和/usr/include/x86_64-linux-gnu/bits/select.hBTW中,通过询问它是如何扩展和如何工作的,我正在寻找C中的宏规则在这里是如何应用的;我无法理解第二行中使用的宏链是如何扩展的?宏通过替换来工作的,例如,您可以替换例如,例如“#定义,定义,定义,定义,uuuuuFD,uuuuuFD,uuuuuFD,uuuuuFD,uuuuuuuuFD,uuuuFD,uuuuFD,uuuuFD,uuuuuFD,uuuuuFD,uFD,uFD,uU,uU,uU,uU,uU,uU,uU,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u_FD_面罩等。