突然某个时候我恍然大悟,原来,程序员如果将 "==" 误写成 "=" ,则前者编译器会报告一个错误,后者编译器报告警告,可能不被程序员重视,甚至IDE(集成开发环境)可以关闭这种警告。
如果写代码养成前者习惯,可以避免将"=="号误写成"="的错误。
51 个解决方案
#1
woo~~~
这种问题面试都会问呀?
那也太难过关了吧?
这种问题面试都会问呀?
那也太难过关了吧?
#2
C#里就没有这个问题了
#3
我买的一本书里用前者,我看了就知道其中的含义了。因为我出现过把“==”写成“=”的失误,导致程序执行结果错误。
#4
真的假的
骗人吧
骗人吧
#5
这是因为在C++中只有左值才可以被赋值的。在1=x中左值是一个常量,因此肯定会引起编译错误,而当写成1==x的时候就正确了。
#6
有些无聊,只好象是事实。因为DirectX SDK示例里的代码都是这么写的。
#7
其实现在已经很流行这种写法了
#8
Linux中都使用这个方法,最早看见这种写法是在MS的一个牛人写的一本书《编写无错优质代码》,好像叫这名,极好的一本书,可惜现在找不着了
#9
真让人思考!我错过:)
#10
偶知道,嘿嘿:)
#11
现在知道了!谢谢!
#12
我是写出来,让大家知晓,如果某公司的再有这样面试题,也有个准备,决不是无聊瞎起哄。
#13
以前看过一篇谁写的c++高效编程时就知道了。
#14
知道了就不用说了.不知道的记住就行了.
#15
这是一个见仁见智的问题。
作为一个程序员,把==和=区分好是你的天职。写if语句的时候我本能地会敲两个=号,我从来没有犯过这种低级的错误。
1==x这种写法对后来看程序的人(包括你自己)来说是很不直观的,这也是这种写法遭受争议的地方,世界上很多大师级的人物都反对这种写法。
我个人也反对1==x这种写法。我认为这说明你对自己没有自信,所以才需要这样来避免错误。
作为一个程序员,把==和=区分好是你的天职。写if语句的时候我本能地会敲两个=号,我从来没有犯过这种低级的错误。
1==x这种写法对后来看程序的人(包括你自己)来说是很不直观的,这也是这种写法遭受争议的地方,世界上很多大师级的人物都反对这种写法。
我个人也反对1==x这种写法。我认为这说明你对自己没有自信,所以才需要这样来避免错误。
#16
无聊,弱智的考官
#17
还有,我认为一个程序员的代码应该不要引起任何的Warning。
比如,while(1)会引起警告,就用for(;;)取代;
无法避免的,在引起警告代码的前后用类似下面语句来关掉警告:
#pragma warning(disable:4444)
...code here
#pragma warning(enable:4444)
认真对待每一个警告也是程序员的职责。
比如,while(1)会引起警告,就用for(;;)取代;
无法避免的,在引起警告代码的前后用类似下面语句来关掉警告:
#pragma warning(disable:4444)
...code here
#pragma warning(enable:4444)
认真对待每一个警告也是程序员的职责。
#18
同意AdvRom(夏望繁星) 的见解。
#19
知道了就不用说了.不知道知道的记住就行了.
没必要老往上顶
没必要老往上顶
#20
真实好主意
#21
有意思!
#22
"认真对待每一个警告也是程序员的职责。"
题目好,说得也好!
题目好,说得也好!
#23
精华贴,真的!
我以前经常把==写成=
有时候还把x/40写成x>>40
调试了一天才发现错误,5555555555~
我以前经常把==写成=
有时候还把x/40写成x>>40
调试了一天才发现错误,5555555555~
#24
有道理,我曾经遇到过。
#25
的确受益菲浅,不让顶,偏再顶一下! :)
#26
我一直都是这么写的.
#27
确实是好办法,其实我也这么用,但不知道有什么好处
#28
很好的帖子,我也经常犯这个错.
#29
网上后很多谈论经验的文章 到google上随便搜索一下就可能有
很多都是很经典的问题 像这个我都看到了n回了
可是在自己的程序中倒是向来是x==1那种情况 我想也许我到了会出错那天才会把这个习惯改过来的了
很多都是很经典的问题 像这个我都看到了n回了
可是在自己的程序中倒是向来是x==1那种情况 我想也许我到了会出错那天才会把这个习惯改过来的了
#30
人都有粗心的时候
#31
建议看看《windows程序调试》
里面有介绍。
里面有介绍。
#32
"认真对待每一个警告也是程序员的职责。"!
哪儿有《windows程序调试》?
哪儿有《windows程序调试》?
#33
同意AdvRom(夏望繁星) 的见解。知道了就不用说了.不知道知道的记住就行了.
#34
有人觉得没什么,我觉得这有道理 是写代码的好习惯.
#35
以前版本的VC对此不出WARNING,但VC6缺省是有WARNING的。
在网上很多版本的C++教程有此介绍。
John Robbins的DEBUGGING APPLICATIONS中也介绍过。
在网上很多版本的C++教程有此介绍。
John Robbins的DEBUGGING APPLICATIONS中也介绍过。
#36
有毛病,怎么会犯这种错误?
而且,写成 if (i=1) 会有warning的呀!!!
而且,写成 if (i=1) 会有warning的呀!!!
#37
我觉得,既然1==x与x==1是一样的,写成1==x的时候如果误写为1=x的话肯定提示这个语法错误,而写成x==1的时候如果误写为x=1的话就不一定能够提示出这个语法错误,这样就可以很方便的发现错误了。这个方法对于经常粗心大意的人来说是挺好的。
#38
got it
#39
太古老了,有点新意好不好
#40
我觉得知道的不要瞎起哄好些
楼主是个好人啊
楼主是个好人啊
#41
同意AdvRom(夏望繁星) 的见解。知道了就不用说了.不知道知道的记住就行了.
#42
是哦,我就被这种错误给害过机会,注意注意
#43
又学一招!
#44
我反对这种写法。作为一个C程序员,在思考时我就想的是“等于等于”,所以从不犯这种错误。写1==x 相当难看,不是C的那种漂亮的风格。
#45
我个人认为,这会造成逻辑混乱!
从逻辑上说,应该是x等于1,而不是1等于x!
从逻辑上说,应该是x等于1,而不是1等于x!
#46
i=1 (把i得值给1)
i==1 (i等于1)
我忘,了好像是这样吧
i==1 (i等于1)
我忘,了好像是这样吧
#47
软件开发的科学与艺术里正好有这个例子,呵呵
#48
还是x==1看着舒服,也符合习惯
考官连这个都考,看来他经常犯这种错误,呵呵
考官连这个都考,看来他经常犯这种错误,呵呵
#49
考官真变态
他一定是因为这多调试了2年零4个月加7天16小时23分5秒的程序——————得出的结论当然是有用的啦!
他一定是因为这多调试了2年零4个月加7天16小时23分5秒的程序——————得出的结论当然是有用的啦!
#50
还有没有新鲜的???
#1
woo~~~
这种问题面试都会问呀?
那也太难过关了吧?
这种问题面试都会问呀?
那也太难过关了吧?
#2
C#里就没有这个问题了
#3
我买的一本书里用前者,我看了就知道其中的含义了。因为我出现过把“==”写成“=”的失误,导致程序执行结果错误。
#4
真的假的
骗人吧
骗人吧
#5
这是因为在C++中只有左值才可以被赋值的。在1=x中左值是一个常量,因此肯定会引起编译错误,而当写成1==x的时候就正确了。
#6
有些无聊,只好象是事实。因为DirectX SDK示例里的代码都是这么写的。
#7
其实现在已经很流行这种写法了
#8
Linux中都使用这个方法,最早看见这种写法是在MS的一个牛人写的一本书《编写无错优质代码》,好像叫这名,极好的一本书,可惜现在找不着了
#9
真让人思考!我错过:)
#10
偶知道,嘿嘿:)
#11
现在知道了!谢谢!
#12
我是写出来,让大家知晓,如果某公司的再有这样面试题,也有个准备,决不是无聊瞎起哄。
#13
以前看过一篇谁写的c++高效编程时就知道了。
#14
知道了就不用说了.不知道的记住就行了.
#15
这是一个见仁见智的问题。
作为一个程序员,把==和=区分好是你的天职。写if语句的时候我本能地会敲两个=号,我从来没有犯过这种低级的错误。
1==x这种写法对后来看程序的人(包括你自己)来说是很不直观的,这也是这种写法遭受争议的地方,世界上很多大师级的人物都反对这种写法。
我个人也反对1==x这种写法。我认为这说明你对自己没有自信,所以才需要这样来避免错误。
作为一个程序员,把==和=区分好是你的天职。写if语句的时候我本能地会敲两个=号,我从来没有犯过这种低级的错误。
1==x这种写法对后来看程序的人(包括你自己)来说是很不直观的,这也是这种写法遭受争议的地方,世界上很多大师级的人物都反对这种写法。
我个人也反对1==x这种写法。我认为这说明你对自己没有自信,所以才需要这样来避免错误。
#16
无聊,弱智的考官
#17
还有,我认为一个程序员的代码应该不要引起任何的Warning。
比如,while(1)会引起警告,就用for(;;)取代;
无法避免的,在引起警告代码的前后用类似下面语句来关掉警告:
#pragma warning(disable:4444)
...code here
#pragma warning(enable:4444)
认真对待每一个警告也是程序员的职责。
比如,while(1)会引起警告,就用for(;;)取代;
无法避免的,在引起警告代码的前后用类似下面语句来关掉警告:
#pragma warning(disable:4444)
...code here
#pragma warning(enable:4444)
认真对待每一个警告也是程序员的职责。
#18
同意AdvRom(夏望繁星) 的见解。
#19
知道了就不用说了.不知道知道的记住就行了.
没必要老往上顶
没必要老往上顶
#20
真实好主意
#21
有意思!
#22
"认真对待每一个警告也是程序员的职责。"
题目好,说得也好!
题目好,说得也好!
#23
精华贴,真的!
我以前经常把==写成=
有时候还把x/40写成x>>40
调试了一天才发现错误,5555555555~
我以前经常把==写成=
有时候还把x/40写成x>>40
调试了一天才发现错误,5555555555~
#24
有道理,我曾经遇到过。
#25
的确受益菲浅,不让顶,偏再顶一下! :)
#26
我一直都是这么写的.
#27
确实是好办法,其实我也这么用,但不知道有什么好处
#28
很好的帖子,我也经常犯这个错.
#29
网上后很多谈论经验的文章 到google上随便搜索一下就可能有
很多都是很经典的问题 像这个我都看到了n回了
可是在自己的程序中倒是向来是x==1那种情况 我想也许我到了会出错那天才会把这个习惯改过来的了
很多都是很经典的问题 像这个我都看到了n回了
可是在自己的程序中倒是向来是x==1那种情况 我想也许我到了会出错那天才会把这个习惯改过来的了
#30
人都有粗心的时候
#31
建议看看《windows程序调试》
里面有介绍。
里面有介绍。
#32
"认真对待每一个警告也是程序员的职责。"!
哪儿有《windows程序调试》?
哪儿有《windows程序调试》?
#33
同意AdvRom(夏望繁星) 的见解。知道了就不用说了.不知道知道的记住就行了.
#34
有人觉得没什么,我觉得这有道理 是写代码的好习惯.
#35
以前版本的VC对此不出WARNING,但VC6缺省是有WARNING的。
在网上很多版本的C++教程有此介绍。
John Robbins的DEBUGGING APPLICATIONS中也介绍过。
在网上很多版本的C++教程有此介绍。
John Robbins的DEBUGGING APPLICATIONS中也介绍过。
#36
有毛病,怎么会犯这种错误?
而且,写成 if (i=1) 会有warning的呀!!!
而且,写成 if (i=1) 会有warning的呀!!!
#37
我觉得,既然1==x与x==1是一样的,写成1==x的时候如果误写为1=x的话肯定提示这个语法错误,而写成x==1的时候如果误写为x=1的话就不一定能够提示出这个语法错误,这样就可以很方便的发现错误了。这个方法对于经常粗心大意的人来说是挺好的。
#38
got it
#39
太古老了,有点新意好不好
#40
我觉得知道的不要瞎起哄好些
楼主是个好人啊
楼主是个好人啊
#41
同意AdvRom(夏望繁星) 的见解。知道了就不用说了.不知道知道的记住就行了.
#42
是哦,我就被这种错误给害过机会,注意注意
#43
又学一招!
#44
我反对这种写法。作为一个C程序员,在思考时我就想的是“等于等于”,所以从不犯这种错误。写1==x 相当难看,不是C的那种漂亮的风格。
#45
我个人认为,这会造成逻辑混乱!
从逻辑上说,应该是x等于1,而不是1等于x!
从逻辑上说,应该是x等于1,而不是1等于x!
#46
i=1 (把i得值给1)
i==1 (i等于1)
我忘,了好像是这样吧
i==1 (i等于1)
我忘,了好像是这样吧
#47
软件开发的科学与艺术里正好有这个例子,呵呵
#48
还是x==1看着舒服,也符合习惯
考官连这个都考,看来他经常犯这种错误,呵呵
考官连这个都考,看来他经常犯这种错误,呵呵
#49
考官真变态
他一定是因为这多调试了2年零4个月加7天16小时23分5秒的程序——————得出的结论当然是有用的啦!
他一定是因为这多调试了2年零4个月加7天16小时23分5秒的程序——————得出的结论当然是有用的啦!
#50
还有没有新鲜的???