Chinaunix首页 | 论坛 | 博客
  • 博客访问: 741430
  • 博文数量: 98
  • 博客积分: 4934
  • 博客等级: 上校
  • 技术积分: 1151
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-12 19:55
文章分类

全部博文(98)

文章存档

2014年(1)

2013年(2)

2012年(4)

2011年(25)

2010年(33)

2009年(33)

分类: WINDOWS

2009-06-25 14:18:27

最近在读别人的源码时,发现一个很有趣的做法:
do
    {
        ZeroMemory(szProtoBuffer, sizeof(szProtoBuffer));

        pMsgHdr = ( PNFS_MSG_HEADER )szProtoBuffer ;

        ZeroMemory( pMsgHdr , sizeof( NFS_MSG_HEADER )) ;

        pMsgHdr->dwSignature = RNFS_MAGIC ;
        pMsgHdr->wProtocolVersion = RNFS_PROTOVERSION ;
        pMsgHdr->btPacketType = RNFS_DGRAM_REQUEST ;
        pMsgHdr->dwPacketLength = 0 ;
        pMsgHdr->wFunctionNum = RNFS_OPEN_SESSION ;
        pMsgHdr->dwAckNumber = dwAckNumber ;

        dwSize = MSG_HDR_LEN + pMsgHdr->dwPacketLength ;

        dwStatus = GU_SendAll(
                        SessionSocket ,
                        szProtoBuffer ,
                        dwSize ) ;
        if( 0 != dwStatus )
        {
            break ;
        }

        dwSize = MSG_HDR_LEN ;

        dwStatus = GU_RecvAll(
                        SessionSocket ,
                        szProtoBuffer,
                        dwSize ) ;
        if( 0 != dwStatus )
        {
            break ;
        }

        if( pMsgHdr->dwAckNumber != dwAckNumber )
        {
            dwStatus = ERROR_BAD_FORMAT ;
            break ;
        }
       
        if( pMsgHdr->dwRetStatus != 0 )
        {
            dwStatus = pMsgHdr->dwRetStatus ;
            break ;
        }

        dwSize = pMsgHdr->dwPacketLength ;

        dwStatus = GU_RecvAll(
                        SessionSocket ,
                        szProtoBuffer ,
                        dwSize ) ;
        if( 0 == dwStatus )
        {
            PNFS_SESSION    pSession = ( PNFS_SESSION )szProtoBuffer ;
            * pdwSessionId = pSession->dwSessionId ;
        }

    } while( FALSE ) ;   
开始觉得不是多此一举吗?仔细分析了以后,才发现很妙,因为在不同的条件判断中就可以按需break;从而达到最终执行到最后一个返回语句。而以前的实 现都是以goto来实现的。有些人的脑袋太聪明。
原文地址:http://blog.chinaunix.net/u3/94873/showart_1975074.html
阅读(657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~