avatar
P*n
1
借着人气问个疑问。
还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有
BUG。
中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) {
问我如果改为通常的 if ( x == 0 ) {
有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和
上下文毫无关联。她听了后也不置可否继续讨论后面问题。
有高手知道些成 0 == X 的形式究竟有什么好处/坏处?
avatar
k*f
2
0==x一不小心少了一个=,编译器会报错的
x==0就不会的。if(x=0)是合法的用法。

【在 P*****n 的大作中提到】
: 借着人气问个疑问。
: 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有
: BUG。
: 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) {
: 问我如果改为通常的 if ( x == 0 ) {
: 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和
: 上下文毫无关联。她听了后也不置可否继续讨论后面问题。
: 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?

avatar
j*i
3
就是把typo提前到编译时报错,而不是到运行时再Debug。

【在 k****f 的大作中提到】
: 0==x一不小心少了一个=,编译器会报错的
: x==0就不会的。if(x=0)是合法的用法。

avatar
D*s
4
这个习惯是一定要养成的,常量能放前面就放前面

所有
觉和

【在 k****f 的大作中提到】
: 0==x一不小心少了一个=,编译器会报错的
: x==0就不会的。if(x=0)是合法的用法。

avatar
c*t
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 的大作中提到】
: 这个习惯是一定要养成的,常量能放前面就放前面
:
: 所有
: 觉和

avatar
t*t
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

avatar
c*t
7
俺是唐大仙的传人 :)

【在 t****t 的大作中提到】
: 虽然我也觉得不好, 但我没你那么多理由. 你强!
avatar
h*e
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

avatar
D*s
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

avatar
c*t
10
readability > debugability
等你编程多了,看的 code 多了,就明白了。

【在 D*********s 的大作中提到】
: 不大同意,如果一个==前后的东西都能提高你读代码速度的话,这代码也
: 太容易读了。

avatar
t*t
11
我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么
要我做?

【在 c*****t 的大作中提到】
: readability > debugability
: 等你编程多了,看的 code 多了,就明白了。

avatar
P*f
12
话说我用g++ 3.4.1 -Wall 编译没给警告
记得以前讨论时说是有的?

我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么
要我做?

【在 t****t 的大作中提到】
: 我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么
: 要我做?

avatar
t*t
13
3.4.1没用过.小版本我升得很勤, 一上来就是3.4.4

【在 P*****f 的大作中提到】
: 话说我用g++ 3.4.1 -Wall 编译没给警告
: 记得以前讨论时说是有的?
:
: 我没你这么多理由, 我的理由就一个: 编译器会提醒你的. 编译器会做的事情, 为什么
: 要我做?

avatar
D*s
14
偶程序也编了10几年了,还从来没遇到过能这么快上手以至于一个==都能影响你阅读
速度的程序。也许是偶太笨,也许时候碰到的都太难,who knows。
争论这个没啥意思,大家求同存异好了。

【在 c*****t 的大作中提到】
: readability > debugability
: 等你编程多了,看的 code 多了,就明白了。

avatar
m*o
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 多了,就明白了。

avatar
N*n
16

I make that mistake a lot when I code C# and TSQL at the same time.

【在 D*********s 的大作中提到】
: 这个习惯是一定要养成的,常量能放前面就放前面
:
: 所有
: 觉和

avatar
z*m
17
VS8 里if(x=0)会出warning,debug的时候停在那里问你是不是你想要这样的operation。

【在 P*****n 的大作中提到】
: 借着人气问个疑问。
: 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有
: BUG。
: 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) {
: 问我如果改为通常的 if ( x == 0 ) {
: 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和
: 上下文毫无关联。她听了后也不置可否继续讨论后面问题。
: 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?

avatar
c*t
18
我这里速读是指一目十行,但求大致理解流程,理解 documentation
里没有提到的某些问题。并不是要达到能 debug 的水平。一般 100
行的 class 应该 4-5 秒内扫完用途并了解大概。Java library
随便一个就是成百上千的 class,没时间一个个读理解,但是出现问
题(比如稍微不符合需要),写 patch 解决。或者同事写的程序不工
作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。

【在 D*********s 的大作中提到】
: 偶程序也编了10几年了,还从来没遇到过能这么快上手以至于一个==都能影响你阅读
: 速度的程序。也许是偶太笨,也许时候碰到的都太难,who knows。
: 争论这个没啥意思,大家求同存异好了。

avatar
g*n
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 解决。或者同事写的程序不工
: 作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。

avatar
D*s
20
你说的也有道理,不过偶从来没用过C++,C写的程序从来都是driver没有算法,
想速度那是难上加难,呵呵

【在 c*****t 的大作中提到】
: 我这里速读是指一目十行,但求大致理解流程,理解 documentation
: 里没有提到的某些问题。并不是要达到能 debug 的水平。一般 100
: 行的 class 应该 4-5 秒内扫完用途并了解大概。Java library
: 随便一个就是成百上千的 class,没时间一个个读理解,但是出现问
: 题(比如稍微不符合需要),写 patch 解决。或者同事写的程序不工
: 作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。

avatar
S*8
21
要是她没有特别指明是C而不是C++的话,可能她期待的答案是Overload operator==的
合法性吧。

【在 P*****n 的大作中提到】
: 借着人气问个疑问。
: 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有
: BUG。
: 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) {
: 问我如果改为通常的 if ( x == 0 ) {
: 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和
: 上下文毫无关联。她听了后也不置可否继续讨论后面问题。
: 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?

avatar
c*x
22

my understand is no difference, 0 == x would excute faster.

【在 P*****n 的大作中提到】
: 借着人气问个疑问。
: 还是一年前的事情,到一家大公司面试,其中一个亚裔MM,让我指出一段C代码中所有
: BUG。
: 中间不知道是即兴而为还是故意迷惑,她指着一行 if ( 0 == x ) {
: 问我如果改为通常的 if ( x == 0 ) {
: 有什么差别?我说没有。当时想到汇编代码寄存器使用可能会不完全相同,不过感觉和
: 上下文毫无关联。她听了后也不置可否继续讨论后面问题。
: 有高手知道些成 0 == X 的形式究竟有什么好处/坏处?

avatar
a*l
23
我的看法是做事要仔细,宁可慢点,不要误导.

【在 c*****t 的大作中提到】
: 我这里速读是指一目十行,但求大致理解流程,理解 documentation
: 里没有提到的某些问题。并不是要达到能 debug 的水平。一般 100
: 行的 class 应该 4-5 秒内扫完用途并了解大概。Java library
: 随便一个就是成百上千的 class,没时间一个个读理解,但是出现问
: 题(比如稍微不符合需要),写 patch 解决。或者同事写的程序不工
: 作要你帮忙查哪里出问题,不可能一句句理解。速读就很重要。

avatar
x*g
24
您是够慢的,一个多月才re上这篇。:-) j/k...

【在 a****l 的大作中提到】
: 我的看法是做事要仔细,宁可慢点,不要误导.
avatar
f*Q
25
Peter Norton 有本书里面说这么着比较好。
avatar
D*s
26
养成习惯,少犯错误
偶前两天就碰到了一次,写成了0=x了,编译马上报错。你要是习惯了写x==0,
少写一个等号可没人给你报错。

【在 f*****Q 的大作中提到】
: Peter Norton 有本书里面说这么着比较好。
avatar
c*x
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 的形式究竟有什么好处/坏处?

avatar
k*k
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.

avatar
t*t
29
肯定是来捣蛋的……

【在 k*k 的大作中提到】
: 大仙,你就收了神通吧~
:
: cast.

avatar
k*k
30
这儿也没啥油水啊,捣蛋有啥好处呢?

【在 t****t 的大作中提到】
: 肯定是来捣蛋的……
avatar
D*s
31
kill time, and see others upset

【在 k*k 的大作中提到】
: 这儿也没啥油水啊,捣蛋有啥好处呢?
avatar
t*u
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

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。