1.赋值加判断同时进行时少了括号如下:
程序本意是将socket(PF_INET,SOCK_STREAM,0)的返回结果赋给socketfd,并判断是不是大于0,本该写为
if((socketfd=socket(PF_INET,SOCK_STREAM,0))<0),由于少了括号(此处用中文括号表示),到是先判
断,再赋值.
if(socketfd=socket(PF_INET,SOCK_STREAM,0)<0)
2.在c语言中用结构体定义变量是struct + 结构体名的.
而且需要没处都加.如果报错时,注意检查是不是没处都加了.特别是在同一行中的情况.
如:connect(socketfd,(struct sockaddr*)sock_addr,sizeof(sockaddr));//此处第二个没有加.仍会报错.多检查一下.少浪费时间.
3.if判断语句后面加了一个分号“;”
出现症状,if后面的语句在条件不成立时也被调用,而且在调试状态下,即使程序没有被优化,if语句也不被执行。
如:
if(a==b); //此处的分号是致命的。而且在if条件很长的情况下,更不容易被发现。
{
printf("a==b\n");
}
4.症状同上.且if后没有;
例如:
#define funcA(A) assert(A!=NULL);func(A)
if(A!=NULL)
funcA(A);
该宏被替换后为:
if(A!=NULL)
assert(A!=NULL);
func(A);
导致即使条件不成立,fcun(A)也会被调用.
解决方案:
#define funA(A) \
do{\
assert(A!=NULL);\
func(A);\
}while(0)
for,while,if都不能完成这样的功能.
5.将中括号写成小括号了。
pthread_create(&tid_produce(i),NULL,produce,&count[i]);
中第一个参数是是数组的。误将中括号写成小括号了。
编译时报出如下错误。
prodcons2.c:59: called object is not a function,以前没有遇到过类似错误。实在无法定位。
pthread_create(&tid_produce[i],NULL,produce,&count[i]);
阅读(1177) | 评论(0) | 转发(1) |