先来看看一个错误的程序:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib") //不可缺
int main()
{
int x = 0;
fd_set y;
if(FD_ISSET(x, &y))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
错误原因是没有对y进行初始化,那如何来初始化呢?请看下面正确的程序:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib") //不可缺
int main()
{
int x = 0;
fd_set y;
FD_ZERO(&y);
if(FD_ISSET(x, &y))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
结果为no
接着看:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib") //不可缺
int main()
{
int x = 0;
fd_set y;
FD_ZERO(&y);
FD_SET(x, &y);
if(FD_ISSET(x, &y))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
结果为:yes
接着看:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib") //不可缺
int main()
{
int x = 0;
fd_set y;
FD_ZERO(&y);
FD_SET(x, &y);
FD_CLR(x, &y);
if(FD_ISSET(x, &y))
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
结果为no
至此,这几个宏的作用应该是搞清楚了。