c++中有些特定的场景需要使用goto语句,但是经常听到说尽量不要使用,会导致程序结构混乱等等。。
下面是do while(0)的一个例子
#include<winsock2.h>
#include<stdio.h>
#pragma comment(lib,"ws2_32.lib) // 链接windows的库
int main()
{
WORD wVersionRequested = MAKEWORD(2,2);
WSADATA wsaData;
int err = WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
return 1;
SOCKET sockSrv = -1;
do{
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
break;
//创建 socket
sockSrv = socket(AF_INET,SOCK_STREAM,0);
if(sockSrv == -1)
break;
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = hton1(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port =htons(6000);
if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))==-1) // 绑定
break;
if(listen(sockSrv,15)==-1)
break;
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
char msg[] = "hello world";
while(1)
{
// 循环接收客户端连接
SOCKET sockClient = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
if(sockClient == -1)
break;
// 发给客户端消息
send(sockClient,msg,strlen(msg),0);
closesocket(sockClient);
}
}while(0);
if(sockSrv !=-1)
closesocket(sockSrv);
WSACleanup();
return 0;
}
补充:利用do while()循环巧妙的将资源的回收操作集中到一个地方