这个书里的程序好象错了?

发表于:2007-05-25来源:作者:点击数: 标签:程序书里错了好象这个
#include unp.hsize_t /* Read n bytes from a descriptor */readn(int fd,void *vptr,size_t n){ ssize_t nleft,nread; char *ptr; ptr=vptr; nleft=n; while(nleft 0) { if((nread=read(fd,ptr,nleft))0) { if(errno==EINTR) nread=0 ; /* and call read()
 
#include "unp.h"
size_t          /* Read "n" bytes from a descriptor */
readn(int fd,void *vptr,size_t n)
{
     ssize_t   nleft,nread;
     char      *ptr;
     ptr=vptr;
     nleft=n;
     while(nleft >0) {
             if((nread=read(fd,ptr,nleft))<0) {
                     if(errno==EINTR)
                               nread=0 ;   /* and call read() again */
                     else
                               return(-1);
             }else if(nread ==0 )
                     break;             /*EOF*/
            nleft -= nread;
            ptr += nread ;
     }
     return(n-nleft);        /* return >= 0 */
}

 

这里考虑了两种情况<0和==0,那剩下的就是>0的喽,
>0的时候直接执行:
nleft -= nread;
ptr += nread ;
 
else是可缺省部分

c语言中的if语句的BNF是
if (expression) if-statement [else else-statement] ;

[此帖于 04-03-27 11:05 被 henryouly 编辑].
 

谢谢大家,看懂了。。默认的正确的动作就是else的情况,长见识了。。。

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)