P*****n 发帖数: 51 | 1 借着人气问个疑问。
还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有
BUG。
中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) {
问我如果改为通常的 if ( x == 0 ) {
有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和
上下文毫无关联。她听了后也不置可否继续讨论后面问题。
有高手知道些成 0 == X 的形式究竟有什么好处/坏处? |
k****f 发帖数: 3794 | 2 0==x一不小心少了一个=,编译器会报错的
x==0就不会的。if(x=0)是合法的用法。
【在 P*****n 的大作中提到】 : 借着人气问个疑问。 : 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有 : BUG。 : 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) { : 问我如果改为通常的 if ( x == 0 ) { : 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和 : 上下文毫无关联。她听了后也不置可否继续讨论后面问题。 : 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?
|
j***i 发帖数: 3096 | 3 就是把typo提前到编译时报错,而不是到运行时再Debug。
【在 k****f 的大作中提到】 : 0==x一不小心少了一个=,编译器会报错的 : x==0就不会的。if(x=0)是合法的用法。
|
D*********s 发帖数: 555 | 4 这个习惯是一定要养成的,常量能放前面就放前面
所有
觉和
【在 k****f 的大作中提到】 : 0==x一不小心少了一个=,编译器会报错的 : x==0就不会的。if(x=0)是合法的用法。
|
c*****t 发帖数: 1879 | 5 其实我觉得不好。不错 = vs == 是个问题,但是这样同时是读代码
困难了很多。if (v == 0) 的意义就是查 v 的情况。在快速读码的
情况下,读 if (v 部分其实就可以了。而 if (0 == v) 相对来说
费劲很多(比如 if (MY_LONG_LONG_LONG_DEF == ...)。这有主次
不分的感觉。
而快速读码(一页 50 行几秒中扫完)的诀窍就是重点只读 =, ==
以前的东西,后面的部分基本上就靠猜。如果后面和预计的不符合,
那么该行属于相对要注意的(bug / feature)。这和读英语的习惯
一样。读一某段话的 topic sentence (一般第一句话),后面的
句子稍微瞟一下就是了。而编程里,=, == 以前的部分就是 topic
sentence 。虽然你可以不按照这习惯写,但是让读的人难受很多。
另外只读 if (v 是因为如果 if (v ==) ..else if (v == ) ...
else if (v ==) 的情况其实写 case switch 更好。所以在使用 if
的情况下,v 部分就是主要部分,然后找 consta
【在 D*********s 的大作中提到】 : 这个习惯是一定要养成的,常量能放前面就放前面 : : 所有 : 觉和
|
t****t 发帖数: 6806 | 6 虽然我也觉得不好, 但我没你那么多理由. 你强!
【在 c*****t 的大作中提到】 : 其实我觉得不好。不错 = vs == 是个问题,但是这样同时是读代码 : 困难了很多。if (v == 0) 的意义就是查 v 的情况。在快速读码的 : 情况下,读 if (v 部分其实就可以了。而 if (0 == v) 相对来说 : 费劲很多(比如 if (MY_LONG_LONG_LONG_DEF == ...)。这有主次 : 不分的感觉。 : 而快速读码(一页 50 行几秒中扫完)的诀窍就是重点只读 =, == : 以前的东西,后面的部分基本上就靠猜。如果后面和预计的不符合, : 那么该行属于相对要注意的(bug / feature)。这和读英语的习惯 : 一样。读一某段话的 topic sentence (一般第一句话),后面的 : 句子稍微瞟一下就是了。而编程里,=, == 以前的部分就是 topic
|
c*****t 发帖数: 1879 | 7 俺是唐大仙的传人 :)
【在 t****t 的大作中提到】 : 虽然我也觉得不好, 但我没你那么多理由. 你强!
|
h****e 发帖数: 2125 | 8 这篇应该被G上。
【在 c*****t 的大作中提到】 : 其实我觉得不好。不错 = vs == 是个问题,但是这样同时是读代码 : 困难了很多。if (v == 0) 的意义就是查 v 的情况。在快速读码的 : 情况下,读 if (v 部分其实就可以了。而 if (0 == v) 相对来说 : 费劲很多(比如 if (MY_LONG_LONG_LONG_DEF == ...)。这有主次 : 不分的感觉。 : 而快速读码(一页 50 行几秒中扫完)的诀窍就是重点只读 =, == : 以前的东西,后面的部分基本上就靠猜。如果后面和预计的不符合, : 那么该行属于相对要注意的(bug / feature)。这和读英语的习惯 : 一样。读一某段话的 topic sentence (一般第一句话),后面的 : 句子稍微瞟一下就是了。而编程里,=, == 以前的部分就是 topic
|
D*********s 发帖数: 555 | 9 不大同意,如果一个==前后的东西都能提高你读代码速度的话,这代码也
太容易读了。
【在 c*****t 的大作中提到】 : 其实我觉得不好。不错 = vs == 是个问题,但是这样同时是读代码 : 困难了很多。if (v == 0) 的意义就是查 v 的情况。在快速读码的 : 情况下,读 if (v 部分其实就可以了。而 if (0 == v) 相对来说 : 费劲很多(比如 if (MY_LONG_LONG_LONG_DEF == ...)。这有主次 : 不分的感觉。 : 而快速读码(一页 50 行几秒中扫完)的诀窍就是重点只读 =, == : 以前的东西,后面的部分基本上就靠猜。如果后面和预计的不符合, : 那么该行属于相对要注意的(bug / feature)。这和读英语的习惯 : 一样。读一某段话的 topic sentence (一般第一句话),后面的 : 句子稍微瞟一下就是了。而编程里,=, == 以前的部分就是 topic
|
c*****t 发帖数: 1879 | 10 readability > debugability
等你编程多了,看的 code 多了,就明白了。
【在 D*********s 的大作中提到】 : 不大同意,如果一个==前后的东西都能提高你读代码速度的话,这代码也 : 太容易读了。
|
|
|
t****t 发帖数: 6806 | 11 我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么
要我做?
【在 c*****t 的大作中提到】 : readability > debugability : 等你编程多了,看的 code 多了,就明白了。
|
P*****f 发帖数: 2272 | 12 话说我用g++ 3.4.1 -Wall 编译没给警告
记得以前讨论时说是有的?
我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么
要我做?
【在 t****t 的大作中提到】 : 我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么 : 要我做?
|
t****t 发帖数: 6806 | 13 3.4.1没用过.小版本我升得很勤, 一上来就是3.4.4
【在 P*****f 的大作中提到】 : 话说我用g++ 3.4.1 -Wall 编译没给警告 : 记得以前讨论时说是有的? : : 我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么 : 要我做?
|
D*********s 发帖数: 555 | 14 偶程序也编了10几年了,还从来没遇到过能这么快上手以至于一个==都能影响你阅读
速度的程序。也许是偶太笨,也许时候碰到的都太难,who knows。
争论这个没啥意思,大家求同存异好了。
【在 c*****t 的大作中提到】 : readability > debugability : 等你编程多了,看的 code 多了,就明白了。
|
m****o 发帖数: 114 | 15 if the code is hard to read, it is most likely a problem with your design,
not a problem with the code
in terms of readability for this special case, i think "if ( 0 == MY_LONG_LONG_LONG_DEF )" is far easier to read than "if ( MY_LONG_LONG_LONG_DEF == 0 )" to me at least.
【在 c*****t 的大作中提到】 : readability > debugability : 等你编程多了,看的 code 多了,就明白了。
|
N********n 发帖数: 8363 | 16
I make that mistake a lot when I code C# and TSQL at the same time.
【在 D*********s 的大作中提到】 : 这个习惯是一定要养成的,常量能放前面就放前面 : : 所有 : 觉和
|
z*****m 发帖数: 98 | 17 VS8 里if(x=0)会出warning,debug的时候停在那里问你是不是你想要这样的operation。
【在 P*****n 的大作中提到】 : 借着人气问个疑问。 : 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有 : BUG。 : 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) { : 问我如果改为通常的 if ( x == 0 ) { : 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和 : 上下文毫无关联。她听了后也不置可否继续讨论后面问题。 : 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?
|
c*****t 发帖数: 1879 | 18 我这里速读是指一目十行,但求大致理解流程,理解 documentation
里没有提到的某些问题。并不是要达到能 debug 的水平。一般 100
行的 class 应该 4-5 秒内扫完用途并了解大概。Java library
随便一个就是成百上千的 class,没时间一个个读理解,但是出现问
题(比如稍微不符合需要),写 patch 解决。或者同事写的程序不工
作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。
【在 D*********s 的大作中提到】 : 偶程序也编了10几年了,还从来没遇到过能这么快上手以至于一个==都能影响你阅读 : 速度的程序。也许是偶太笨,也许时候碰到的都太难,who knows。 : 争论这个没啥意思,大家求同存异好了。
|
g****n 发帖数: 14 | 19 Cannot agree more.
When coding, I would enable all possible compiler warnings. In some cases, I
use #pragma to disable warnings in some lines. When diabling a warning,
however, you need to know clearly what you are doing. IMO, treating compiler
warning as error is a good practice in big projects.
【在 c*****t 的大作中提到】 : 我这里速读是指一目十行,但求大致理解流程,理解 documentation : 里没有提到的某些问题。并不是要达到能 debug 的水平。一般 100 : 行的 class 应该 4-5 秒内扫完用途并了解大概。Java library : 随便一个就是成百上千的 class,没时间一个个读理解,但是出现问 : 题(比如稍微不符合需要),写 patch 解决。或者同事写的程序不工 : 作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。
|
D*********s 发帖数: 555 | 20 你说的也有道理,不过偶从来没用过C++,C写的程序从来都是driver没有算法,
想速度那是难上加难,呵呵
【在 c*****t 的大作中提到】 : 我这里速读是指一目十行,但求大致理解流程,理解 documentation : 里没有提到的某些问题。并不是要达到能 debug 的水平。一般 100 : 行的 class 应该 4-5 秒内扫完用途并了解大概。Java library : 随便一个就是成百上千的 class,没时间一个个读理解,但是出现问 : 题(比如稍微不符合需要),写 patch 解决。或者同事写的程序不工 : 作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。
|
|
|
S******8 发帖数: 24594 | 21 要是她没有特别指明是C而不是C++的话,可能她期待的答案是Overload operator==的
合法性吧。
【在 P*****n 的大作中提到】 : 借着人气问个疑问。 : 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有 : BUG。 : 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) { : 问我如果改为通常的 if ( x == 0 ) { : 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和 : 上下文毫无关联。她听了后也不置可否继续讨论后面问题。 : 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?
|
c********x 发帖数: 84 | 22
my understand is no difference, 0 == x would excute faster.
【在 P*****n 的大作中提到】 : 借着人气问个疑问。 : 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有 : BUG。 : 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) { : 问我如果改为通常的 if ( x == 0 ) { : 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和 : 上下文毫无关联。她听了后也不置可否继续讨论后面问题。 : 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?
|
a****l 发帖数: 8211 | 23 我的看法是做事要仔细,宁可慢点,不要误导.
【在 c*****t 的大作中提到】 : 我这里速读是指一目十行,但求大致理解流程,理解 documentation : 里没有提到的某些问题。并不是要达到能 debug 的水平。一般 100 : 行的 class 应该 4-5 秒内扫完用途并了解大概。Java library : 随便一个就是成百上千的 class,没时间一个个读理解,但是出现问 : 题(比如稍微不符合需要),写 patch 解决。或者同事写的程序不工 : 作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。
|
x******g 发帖数: 3952 | 24 您是够慢的,一个多月才re上这篇。:-) j/k...
【在 a****l 的大作中提到】 : 我的看法是做事要仔细,宁可慢点,不要误导.
|
f*****Q 发帖数: 1912 | 25 Peter Norton 有本书里面说这么着比较好。 |
D*********s 发帖数: 555 | 26 养成习惯,少犯错误
偶前两天就碰到了一次,写成了0=x了,编译马上报错。你要是习惯了写x==0,
少写一个等号可没人给你报错。
【在 f*****Q 的大作中提到】 : Peter Norton 有本书里面说这么着比较好。
|
c********x 发帖数: 84 | 27
the difference is the rvalue determine the type of the lvalue needed to cast.
if ( 0 == x ) if x is float, 0 is casted to 0.0f.
【在 P*****n 的大作中提到】 : 借着人气问个疑问。 : 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有 : BUG。 : 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) { : 问我如果改为通常的 if ( x == 0 ) { : 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和 : 上下文毫无关联。她听了后也不置可否继续讨论后面问题。 : 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?
|
k*k 发帖数: 508 | 28 大仙,你就收了神通吧~
cast.
【在 c********x 的大作中提到】 : : the difference is the rvalue determine the type of the lvalue needed to cast. : if ( 0 == x ) if x is float, 0 is casted to 0.0f.
|
t****t 发帖数: 6806 | 29 肯定是来捣蛋的……
【在 k*k 的大作中提到】 : 大仙,你就收了神通吧~ : : cast.
|
k*k 发帖数: 508 | 30 这儿也没啥油水啊,捣蛋有啥好处呢?
【在 t****t 的大作中提到】 : 肯定是来捣蛋的……
|
|
|
D*********s 发帖数: 555 | 31 kill time, and see others upset
【在 k*k 的大作中提到】 : 这儿也没啥油水啊,捣蛋有啥好处呢?
|
t****u 发帖数: 8614 | 32 You are right!
Actually in C++ world, (0==x) is a bad style.
The x might be a class instance, to improve the performance,
you might have x's class overload the operator==(int val) function.
Then (0==x) will invoke an implicit conversion (meaning convert 0
to x class type, x's class has a construct with integer as parameter).
Typically, in terms of generic programming, which template is involved
(e.g. STL), the (0==x) style shall be avoided.
Plus, "if (x=0)" will be caught as a warning by most co
【在 c*****t 的大作中提到】 : 其实我觉得不好。不错 = vs == 是个问题,但是这样同时是读代码 : 困难了很多。if (v == 0) 的意义就是查 v 的情况。在快速读码的 : 情况下,读 if (v 部分其实就可以了。而 if (0 == v) 相对来说 : 费劲很多(比如 if (MY_LONG_LONG_LONG_DEF == ...)。这有主次 : 不分的感觉。 : 而快速读码(一页 50 行几秒中扫完)的诀窍就是重点只读 =, == : 以前的东西,后面的部分基本上就靠猜。如果后面和预计的不符合, : 那么该行属于相对要注意的(bug / feature)。这和读英语的习惯 : 一样。读一某段话的 topic sentence (一般第一句话),后面的 : 句子稍微瞟一下就是了。而编程里,=, == 以前的部分就是 topic
|