博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux:原因及解法warning: suggest parentheses around assignment used as truth value [-Wparentheses]
阅读量:2768 次
发布时间:2019-05-13

本文共 681 字,大约阅读时间需要 2 分钟。

https://blog.csdn.net/GentelmanTsao

警告

warning: suggest parentheses around assignment used as truth value [-Wparentheses]

源代码:

while( recv_len = recv(sockfd,&operation,sizeof(operation),0) ){。。。}

原因分析:

Linux下C语言实现socket通信,报了这个警告。字面意思是,建议给赋值语句加上括号作为真值。

上面的代码在语法上没有任何毛病。

为什么编译器要做这样的提示?我们来简单捋一捋。

c语言的布尔值

C89中没有定义布尔类型,C语言判断真假时以0为假,非0为真。

首先,在上面的代码中,recv_len的值可能是-1,这种情况下C语言仍然认为while的条件成立。因为-1可表示为true。

“=”和“==”的甄别

其次,编译器猜测开发者出现手误,原意图是“==”(比较运算)结果少敲一个符号变成了“=”(赋值),由于这种情况比较常见,会导致语义的改变而不易被察觉。为了让编译器清楚你想要的就是赋值,编译器建议你给赋值语句加上括号。

修改后代码:

while( (recv_len = recv(sockfd,&operation,sizeof(operation),0)) > 0 ){。。。}

这样一来,编译器就心满意足了。

By:GentlemanTsao

Android&modem软件专家,分享技术干活和研发心得,欢迎点赞、关注哟~
0(n_n)0

你可能感兴趣的文章
技术人员的晋升路线
查看>>
JavaFX落入尴尬境地,发布近两年竟收效甚微
查看>>
怎么营造一个团队的良好气氛?
查看>>
谁比谁更忽悠?转贴一篇文章“VC的狂傲:互联网95%在忽悠”
查看>>
九十后女生眼中的事业与爱情
查看>>
一名北理工学子的心路历程
查看>>
全球第三大社交网络hi5裁员50% 公司重组所致
查看>>
上海只适合zuoai 不适合恋爱
查看>>
Silverlight 3 新特性
查看>>
关于淘宝网性能测试的思考
查看>>
.net中Dataset数据集的认识
查看>>
项目发布后的问题跟踪
查看>>
不要做需求阶段的“听长”
查看>>
MIX09的感想(之一):About IE8
查看>>
白盒测试体系的探索
查看>>
测试人员如何不被开发人员牵着鼻子走?
查看>>
web性能测试术语小集合
查看>>
网站架构探索(3)---负载均衡的方式
查看>>
初识Top命令
查看>>
MySQL权限
查看>>