调试

1、逻辑判断是否相等“==”,被误写成赋值等号“=”

else if(buf[0] == '\0')

    逻辑判断 与 赋值运算 的括号 匹配错误,例:if( (fd=open("temp.txt", O_RDONLY) < 0) )

改正:

136         if((fd=open("temp.txt", O_RDONLY)) < 0)
137         {
138                 write(sockfd, "ERROR: fail to ls server file\n",
139                         strlen("ERROR: fail to ls server file\n"));
140                 return -1;
141         }

2、宏定义续行符\ 后面不能有空格

warning: backslash and newline separated by space [enabled by default]

  3 #define del_blank(p, cline) do{ \
  4         while(cline[p]!='\0' && (cline[p]==' ' || cline[p]=='\t')) \
  5                 p++; \ 
  6         }while(0)
3、 宏定义中的变量 不能与函数中的变量 同名

  8 // 宏定义中的变量 不能与函数中的变量 同名
  9 #define get_arg(arg, p, cline) do{ \
 10         int j = 0; \
 11         while(cline[p]!='\0' && cline[p]!=' ' && cline[p]!='\t') \
 12                 arg[j++] = cline[p++]; \
 13         }while(0)
 29                 get_arg(command->argv[i], p, cline);

4、交换两个数,避免使用异或运算

  9 #define swap(a, b) do{ \
 10         (a) = (a) ^ (b); \
 11         (b) = (b) ^ (a); \
 12         (a) = (a) ^ (b); \
 13         }while(0)

当a和b为数组中的同一个元素时,异或运算的交换就会出错,数组中的该元素将被置为0。原因是,a和b存储在同一个地址空间,第一步异或运算的结果就将该空间的值置为0了。

下面这个也不行

#define swap(a, b) do{ \
        (a) = (a) + (b); \
        (b) = (b) - (a); \
        (a) = (a) - (b); \
        }while(0)
必须得定义一个临时变量,而且该临时变量不能与函数中的变量同名


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值