amobbs.com 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
回复: 77

if(n=3){ }能引起死循环?

[复制链接]
(798676)

打赏出0元收入0元

发表于 2020-6-29 10:05:59 | 显示全部楼层 |阅读模式
if(n=3){   }能引起死循环?少写了一个等号,程序就死循环了。
(798532)

打赏出0元收入0元

发表于 2020-6-29 10:08:23 来自手机 | 显示全部楼层
现代编译器一般都会给警告的吧?
(798253)

打赏出0元收入0元

发表于 2020-6-29 10:13:02 | 显示全部楼层
编译时的警告直接无视么?
(798211)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 10:13:44 | 显示全部楼层
techbaby 发表于 2020-6-29 10:08
现代编译器一般都会给警告的吧?

警告有,但是不会编译不通过。习惯一般不看警告。
(798172)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 10:14:23 | 显示全部楼层
Dew_maple 发表于 2020-6-29 10:13
编译时的警告直接无视么?

是真的无视,就是程序多了,修修改改的,上百个警告,也不看了。
(798139)

打赏出0元收入0元

发表于 2020-6-29 10:14:56 | 显示全部楼层
这个习惯可不好
(798083)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 10:15:52 | 显示全部楼层
noneno 发表于 2020-6-29 10:14
这个习惯可不好

谢谢,小公司,不是大公司,什么事都要去做,老板恨不得一个人当10个人用那种。
(797918)

打赏出0元收入0元

发表于 2020-6-29 10:18:37 | 显示全部楼层
ZHAOBAO511 发表于 2020-6-29 10:15
谢谢,小公司,不是大公司,什么事都要去做,老板恨不得一个人当10个人用那种。 ...

警告都不看,  这你一个人的事情,需要10个人去给你擦屁股了。
(797621)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 10:23:34 | 显示全部楼层
huangyiting1990 发表于 2020-6-29 10:18
警告都不看,  这你一个人的事情,需要10个人去给你擦屁股了。

不是一点不看,肯定要看,另外公司没你想的那么多人,自己的产品自己负责,从PCB 到客户手中。
(796207)

打赏出0元收入0元

发表于 2020-6-29 10:47:08 | 显示全部楼层
默默记下你家公司,不敢用了。
(796109)

打赏出0元收入0元

发表于 2020-6-29 10:48:46 | 显示全部楼层
我都是要看0警告才放心
(795899)

打赏出0元收入0元

发表于 2020-6-29 10:52:16 | 显示全部楼层
代码都是开最高优化等级,0警告,才可以的。哪怕是定义了一个变量没用到这种警告都要解决才行,这是态度问题。
(795713)

打赏出0元收入1元

发表于 2020-6-29 10:55:22 | 显示全部楼层
连警告也不看,强人。

这样,就算运行正常,风险也一样存在。
(795514)

打赏出6元收入1元

发表于 2020-6-29 10:58:41 | 显示全部楼层
n=3  是一个真值,所以就死循环了
(795438)

打赏出6元收入1元

发表于 2020-6-29 10:59:57 | 显示全部楼层
3==n 我们一般都这样写?编译器会出错,而不是警告  
(795093)

打赏出0元收入0元

发表于 2020-6-29 11:05:42 | 显示全部楼层
n=3的值是3,相当于if(3){……}
(792906)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:42:09 | 显示全部楼层
armstrong 发表于 2020-6-29 10:47
默默记下你家公司,不敢用了。

记清楚一点啊。
(792879)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:42:36 | 显示全部楼层
281229961 发表于 2020-6-29 10:48
我都是要看0警告才放心

后期梳理。
(792823)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:43:32 | 显示全部楼层
281229961 发表于 2020-6-29 10:48
我都是要看0警告才放心

谢谢,受教了。
(792792)

打赏出0元收入0元

发表于 2020-6-29 11:44:03 | 显示全部楼层
CDI中,这种被发现会被同事鄙视的。
公司要求代码要通过静态工具检查,每次检查结果中的警告和风险提示,都要求给出合理理由。
为了减少麻烦,别说是编译器的警告,就是静态检查工具的警告,我都会尽力消除。
(792782)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:44:13 | 显示全部楼层
wajlh 发表于 2020-6-29 10:52
代码都是开最高优化等级,0警告,才可以的。哪怕是定义了一个变量没用到这种警告都要解决才行,这是态度问 ...

因为中间一些变量一会用一会不用,所以后期才整理的。
(792761)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:44:34 | 显示全部楼层
epwwm 发表于 2020-6-29 10:55
连警告也不看,强人。

这样,就算运行正常,风险也一样存在。

后期会整理的。
(792737)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:44:58 | 显示全部楼层
lhj200304 发表于 2020-6-29 10:58
n=3  是一个真值,所以就死循环了

谢谢,看来C真的要注意了。
(792701)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:45:34 | 显示全部楼层
lhj200304 发表于 2020-6-29 10:59
3==n 我们一般都这样写?编译器会出错,而不是警告

这样好一点,出错机会少一些。
(792656)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:46:19 | 显示全部楼层
tlptotop 发表于 2020-6-29 11:44
CDI中,这种被发现会被同事鄙视的。
公司要求代码要通过静态工具检查,每次检查结果中的警告和风险提示,都 ...

什么是静态检查工具?我是后期整理,前期只管写软件。
(792617)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:46:58 | 显示全部楼层
zhugean 发表于 2020-6-29 11:05
n=3的值是3,相当于if(3){……}

谢谢,少个等号真的很容易出错的。
(792154)

打赏出0元收入0元

发表于 2020-6-29 11:54:41 | 显示全部楼层
我就奇了怪了,if语句是个判断语句,能循环?循环?环?...
栽赃也不是这种栽法,if表示虽然用错了,但是这个锅是不背的
(791884)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 11:59:11 | 显示全部楼层
takashiki 发表于 2020-6-29 11:54
我就奇了怪了,if语句是个判断语句,能循环?循环?环?...
栽赃也不是这种栽法,if表示虽然用错了,但是这 ...

程序都是循环的,这个语句是在循环中,走到这里就停了。
(791768)

打赏出0元收入0元

发表于 2020-6-29 12:01:07 | 显示全部楼层
养成一个习惯,,当你写 if(n=3)  警告,但是不会出错  如果你这样 if(3=n)  那就是错误,编译不过的

10年前,我就这样了,对这种和常数比较的,都这样写
(790716)

打赏出0元收入0元

发表于 2020-6-29 12:18:39 | 显示全部楼层
ZHAOBAO511 发表于 2020-6-29 11:46
什么是静态检查工具?我是后期整理,前期只管写软件。

类似于C++ test 之类的工具
另外,推荐 林锐 《高质量C/C++编程》,可以让代码更规范,避免类似的错误
(789835)

打赏出0元收入0元

发表于 2020-6-29 12:33:20 | 显示全部楼层
规定写成 3==n, 这样的成本最低
(789766)

打赏出0元收入0元

发表于 2020-6-29 12:34:29 | 显示全部楼层
死循环,必须的
(789662)

打赏出0元收入0元

发表于 2020-6-29 12:36:13 | 显示全部楼层
所以有的公司在规范里要求3 == n,这种写法,就是避免你遇到的这种情况
(786589)

打赏出0元收入0元

发表于 2020-6-29 13:27:26 | 显示全部楼层
楼主不是用中文编译器么,瞎折腾什么C
(786221)

打赏出0元收入0元

发表于 2020-6-29 13:33:34 | 显示全部楼层
N==3   和 N=3是有区别的 N=3永远为真
(781849)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 14:46:26 | 显示全部楼层
zhuyi25762 发表于 2020-6-29 12:01
养成一个习惯,,当你写 if(n=3)  警告,但是不会出错  如果你这样 if(3=n)  那就是错误,编译不过的
...

这个办法真的可以,谢了。
(781804)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 14:47:11 | 显示全部楼层
sbusr 发表于 2020-6-29 12:34
死循环,必须的

对,所有程序不就是 一个大循环?这样一写就进入死循环了。
(781724)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 14:48:31 | 显示全部楼层
simplorer 发表于 2020-6-29 12:36
所以有的公司在规范里要求3 == n,这种写法,就是避免你遇到的这种情况

是吗?还是第一次听说。
(781681)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 14:49:14 | 显示全部楼层
amigenius 发表于 2020-6-29 13:27
楼主不是用中文编译器么,瞎折腾什么C

中文编译器是大家开发的,写超大型代码还是用C。
(781640)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 14:49:55 | 显示全部楼层
ackyee 发表于 2020-6-29 13:33
N==3   和 N=3是有区别的 N=3永远为真

对,只是一不小心就忘了,好像平时说话一样,总有时候会说错的,尽管再小心。
(781268)

打赏出0元收入0元

发表于 2020-6-29 14:56:07 | 显示全部楼层
花点时间处理警告吧,省得一个不小心花几天去查问题。
我们的基本要求是0警告,这样才放心
(781048)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 14:59:47 | 显示全部楼层
fuu 发表于 2020-6-29 14:56
花点时间处理警告吧,省得一个不小心花几天去查问题。
我们的基本要求是0警告,这样才放心 ...

谢谢,有的鸡肋程序,不要吧,后面又要重写加上,要吧,暂时要注释掉,一注释,就出警告,因为很多变量都有牵扯。
(780392)

打赏出0元收入0元

发表于 2020-6-29 15:10:43 | 显示全部楼层
ZHAOBAO511 发表于 2020-6-29 14:59
谢谢,有的鸡肋程序,不要吧,后面又要重写加上,要吧,暂时要注释掉,一注释,就出警告,因为很多变量都 ...

可以把没使用变量的警告屏蔽,就不会警告满天飞,影响真正需要注意的警告了
(780346)

打赏出0元收入0元

发表于 2020-6-29 15:11:29 | 显示全部楼层
ZHAOBAO511 发表于 2020-6-29 14:49
中文编译器是大家开发的,写超大型代码还是用C。

您那个中文编译器,貌似就是把C的关键字变成中文而已,换汤不换药啊
(780124)

打赏出0元收入0元

发表于 2020-6-29 15:15:11 | 显示全部楼层
eclipse中貌似这种不会警告吧.
(780113)

打赏出0元收入0元

发表于 2020-6-29 15:15:22 | 显示全部楼层
amigenius 发表于 2020-6-29 15:10
可以把没使用变量的警告屏蔽,就不会警告满天飞,影响真正需要注意的警告了 ...

这个要求太高了,要别人懂关警告开关,还要懂这些警告的意思,这些都是“架构师”做的事,程序员只要代码跑起来就行了。
(779962)

打赏出0元收入0元

发表于 2020-6-29 15:17:53 | 显示全部楼层
canspider 发表于 2020-6-29 15:15
这个要求太高了,要别人懂关警告开关,还要懂这些警告的意思,这些都是“架构师”做的事,程序员只要代码 ...

兄弟您这是在调侃么?
(778054)

打赏出0元收入0元

 楼主| 发表于 2020-6-29 15:49:41 | 显示全部楼层
amigenius 发表于 2020-6-29 15:10
可以把没使用变量的警告屏蔽,就不会警告满天飞,影响真正需要注意的警告了 ...

各种变量交织在一起的程序段不少啊,今天屏蔽明天又要打开,小公司说改就改,老板一句话。
(776801)

打赏出0元收入0元

发表于 2020-6-29 16:10:34 | 显示全部楼层
amigenius 发表于 2020-6-29 15:17
兄弟您这是在调侃么?

我希望是调侃
(773468)

打赏出0元收入0元

发表于 2020-6-29 17:06:07 来自手机 | 显示全部楼层
又是将=当成==用
(773373)

打赏出0元收入0元

发表于 2020-6-29 17:07:42 | 显示全部楼层
不是死循环,就是括号里的语句一直能执行到。
(766902)

打赏出0元收入0元

发表于 2020-6-29 18:55:33 | 显示全部楼层
一般是常量写在前面,变量写在后面,比如3==n
(758382)

打赏出0元收入0元

发表于 2020-6-29 21:17:33 | 显示全部楼层
if也能死循环吗,第一次听说
(756435)

打赏出0元收入1元

发表于 2020-6-29 21:50:00 来自手机 | 显示全部楼层
楼主的产品俺也不敢用,任何小程序的一个警告都不会放过,不然无数的麻烦会等着你,更不敢说楼主的大程序了。也是和楼上一样,第一次听说if 死循环现象。
(717747)

打赏出0元收入0元

 楼主| 发表于 2020-6-30 08:34:48 | 显示全部楼层
zhikunWang 发表于 2020-6-29 17:07
不是死循环,就是括号里的语句一直能执行到。

对,一直在执行。
(717718)

打赏出0元收入0元

 楼主| 发表于 2020-6-30 08:35:17 | 显示全部楼层
kukudi 发表于 2020-6-29 18:55
一般是常量写在前面,变量写在后面,比如3==n

给出这个说法的都是朋友。
(716285)

打赏出0元收入0元

发表于 2020-6-30 08:59:10 | 显示全部楼层
wajlh 发表于 2020-6-29 10:52
代码都是开最高优化等级,0警告,才可以的。哪怕是定义了一个变量没用到这种警告都要解决才行,这是态度问 ...

这才是程序员,应有的态度! 赞
(715511)

打赏出0元收入0元

发表于 2020-6-30 09:12:04 | 显示全部楼层
我有强迫症,0警告 0错误才算完事,有些没必要的强制转换,只要编译器提醒了,我就一个一个加。
(714087)

打赏出0元收入0元

 楼主| 发表于 2020-6-30 09:35:48 | 显示全部楼层
account 发表于 2020-6-30 09:12
我有强迫症,0警告 0错误才算完事,有些没必要的强制转换,只要编译器提醒了,我就一个一个加。 ...

好吧,这个习惯的确好。
(710602)

打赏出0元收入0元

发表于 2020-6-30 10:33:53 | 显示全部楼层
为啥?又不是while(n=3){}?
(709700)

打赏出0元收入0元

 楼主| 发表于 2020-6-30 10:48:55 | 显示全部楼层
shiva_shiva 发表于 2020-6-30 10:33
为啥?又不是while(n=3){}?

你试一下就知道了,解释不清楚。
(699700)

打赏出0元收入0元

发表于 2020-6-30 13:35:35 | 显示全部楼层
ZHAOBAO511 发表于 2020-6-30 10:48
你试一下就知道了,解释不清楚。

我试了,不死循环。
(698226)

打赏出0元收入0元

发表于 2020-6-30 14:00:09 | 显示全部楼层
shiva_shiva 发表于 2020-6-30 10:33
为啥?又不是while(n=3){}?

可能他那个if语句块里有能引起死循环的程序
(696980)

打赏出0元收入0元

 楼主| 发表于 2020-6-30 14:20:55 | 显示全部楼层
shiva_shiva 发表于 2020-6-30 13:35
我试了,不死循环。

谢谢,我刚了一下,外面有个FOR。
(696947)

打赏出0元收入0元

 楼主| 发表于 2020-6-30 14:21:28 | 显示全部楼层
modbus 发表于 2020-6-30 14:00
可能他那个if语句块里有能引起死循环的程序

都是高手啊。
(689958)

打赏出0元收入0元

发表于 2020-6-30 16:17:57 | 显示全部楼层
zhuyi25762 发表于 2020-6-29 12:01
养成一个习惯,,当你写 if(n=3)  警告,但是不会出错  如果你这样 if(3=n)  那就是错误,编译不过的
...

虽然if(3==n)有各种好处,但影响阅读,这会让人精神失常,大小便失禁
(689397)

打赏出0元收入0元

发表于 2020-6-30 16:27:18 | 显示全部楼层
记住了,以后多多注意
(686024)

打赏出0元收入0元

 楼主| 发表于 2020-6-30 17:23:31 | 显示全部楼层
michael.yang 发表于 2020-6-30 16:17
虽然if(3==n)有各种好处,但影响阅读,这会让人精神失常,大小便失禁

没这么夸张吧。
(683911)

打赏出0元收入0元

发表于 2020-6-30 17:58:44 | 显示全部楼层
michael.yang 发表于 2020-6-30 16:17
虽然if(3==n)有各种好处,但影响阅读,这会让人精神失常,大小便失禁

终于看到一个反对3==n的了,其实我也反对
(667776)

打赏出0元收入0元

发表于 2020-6-30 22:27:39 来自手机 | 显示全部楼层
一个程序几百个警告,所以忽略么
(615282)

打赏出0元收入0元

发表于 7 天前 | 显示全部楼层
simplorer 发表于 2020-6-29 12:36
所以有的公司在规范里要求3 == n,这种写法,就是避免你遇到的这种情况

这个办法好。
(581568)

打赏出0元收入0元

发表于 7 天前 | 显示全部楼层
3==n是很久以来的传统写法,不过现代的编译环境已经很强大了,==误写为=都可以依靠警告提示来避免,为了阅读程序愉快,我建议还是写成n==3,用编译环境的强大来避免低级的输入错误,现在已经有这种条件了。
(576403)

打赏出0元收入0元

发表于 7 天前 来自手机 | 显示全部楼层
zhuyi25762 发表于 2020-6-29 12:01
养成一个习惯,,当你写 if(n=3)  警告,但是不会出错  如果你这样 if(3=n)  那就是错误,编译不过的
...

确实,我也习惯倒着写,避免入坑。也是十年前老司机教的。
(533257)

打赏出0元收入0元

发表于 6 天前 | 显示全部楼层
经常在一个函数里有编译开关,关闭之后没用到的局部变量就会有警告,我一般在函数末尾加(void)value来消除警告
(517118)

打赏出0元收入0元

 楼主| 发表于 6 天前 | 显示全部楼层
fuu 发表于 2020-7-2 11:49
经常在一个函数里有编译开关,关闭之后没用到的局部变量就会有警告,我一般在函数末尾加(void)value来消除 ...

这个方法可以啊,怎么加的?
(516299)

打赏出0元收入0元

发表于 6 天前 | 显示全部楼层
void fun(void)
{
        uint8_t counter = 0;
       
        ...
        ...
        ...
       
        (void)counter;
}
(515695)

打赏出0元收入0元

 楼主| 发表于 6 天前 | 显示全部楼层
fuu 发表于 2020-7-2 16:32
void fun(void)
{
        uint8_t counter = 0;

谢谢,我试试看,与其最后警告,不如这里加个说明,好办法。
(148067)

打赏出0元收入0元

发表于 前天 22:49 | 显示全部楼层
if(3==n)的这种写法,学习了
回帖提示: 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-7-8 15:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表