do{}while(0)的疑惑
我在看winsock2.h这个文件的事后发现这样一个宏定义:
#define FD_CLR(fd, set) do { u_int __i; for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { if (((fd_set FAR *)(set))->fd_array[__i] == fd) { while (__i < ((fd_set FAR *)(set))->fd_count-1) { ((fd_set FAR *)(set))->fd_array[__i] = ((fd_set FAR *)(set))->fd_array[__i+1]; __i++; } ((fd_set FAR *)(set))->fd_count--; break; } } } while(0)
我不明白的是为什么要用do{}while(0);这样的结构,很显然这样的写法,结构里面的东西只运行一次,为了达到这个目的,不加这个结构也可以实现的啊;我在想是不是由于想要兼容c语言(不能在中间定义局部变量)关系,但是我想,为了使用一个局部变量(c语言中)只要加一对{}就可以在中间使用局部变量啊!实在是想不明白,请高手指点。