Chinaunix首页 | 论坛 | 博客
  • 博客访问: 637248
  • 博文数量: 116
  • 博客积分: 6078
  • 博客等级: 准将
  • 技术积分: 1214
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 10:09
文章分类

全部博文(116)

文章存档

2016年(1)

2015年(4)

2011年(2)

2010年(21)

2009年(88)

分类: C/C++

2009-06-23 21:33:58


     最近在读别人的源码时,发现一个很有趣的做法:
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来实现的。有些人的脑袋太聪明。
阅读(1300) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-02-02 10:20:47

呵呵,学习了~我也是郁闷啊~看了您的解释就很明白了~~