你能记得写if常量放前面,为什么记不得写双等号?为什么不用编译器的警告功能?

DarknessTM 2008-07-17 08:49:28
高质量编程中 if判断中常量写前面绝对是不科学的,要我常量写前面,我宁可写switch...case

真不明白了,可以让机器来检查的事,非要让人自己搞的难受,说到底,你写前面还不是让编译器给出错误

难道编译器给出警告,程序员就可以不管了?
...全文
333 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
DarknessTM 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 uoyevoli 的回复:]
引用 17 楼 DarknessTM 的回复:

if( p != NULL) delete p;
远比
if( p ) delete p;




其实 delete NULL;是不会有任何问题的.你的这个if是多余的
[/Quote]

我只是随便举个例子
换成COM好了

if( p != NULL)
{
p->Release();
p = NULL;
}

if(p)
{
p->Release();
p = NULL;
}
uoyevoli 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 DarknessTM 的回复:]

if( p != NULL) delete p;
远比
if( p ) delete p;


[/Quote]

其实 delete NULL;是不会有任何问题的.你的这个if是多余的
kakashi0309 2008-07-24
  • 打赏
  • 举报
回复
习惯成自然 何必计较呢
DarknessTM 2008-07-23
  • 打赏
  • 举报
回复
什么叫一遍遍的检查?

宏和常量没有是区别啊,到了编译时期都一样了

或者说你是想说,应该允许默认的布尔转换? 我觉得良好的习惯是不使用默认的布尔转换

比如释放一个new内存

if( p != NULL) delete p;
远比
if( p ) delete p;

僵哥 2008-07-22
  • 打赏
  • 举报
回复
当然,可以说对于:
#define NUM_CONST 1

if(My_Num = NUM_CONST ){
DoSomething(My_Num/*ref*/);
}else{
DoSomethingElse(My_Num/*ref*/);
}

换用:
#define NUM_CONST 1
My_Num = NUM_CONST ;
if(My_Num != 0){
DoSomething(My_Num/*ref*/);
}else{
DoSomethingElse(My_Num/*ref*/);
}

但是如果前后分支所匹配的条件(个数)不单一,那就大不一样。

就好比,很多人都在骂,某些考官考什么运算符的优先顺序之类的,这骂归骂,该要注意还得注意。

僵哥 2008-07-22
  • 打赏
  • 举报
回复
对于直接的数值常量确实编译器可以进行检查,这个从理论上来讲,至少大部分人都不会反对.
但是对于由宏定义的(#define)常量,那就不同了
#define NUM_CONST 1

if(My_Num = NUM_CONST ){
DoSomething(My_Num/*ref*/);
}else{
DoSomethingElse(My_Num/*ref*/);
}


象这样子的无可厚非,但是如果这个时候出来警告的话,代码多了,那就每次都得一遍一遍检查,否则还得多写代码来关掉警告(别告诉,警告不需要检查类似自相矛盾的话)而对于编译器来说,这段代码此时就等同于:

if(My_Num = 1){
DoSomething(My_Num/*ref*/);
}else{
DoSomethingElse(My_Num/*ref*/);
}


换而言之,使用switch,相比结果并没有什么差异,但是只能用于有限集合。
DarknessTM 2008-07-22
  • 打赏
  • 举报
回复
看帖不认真的太多
Zhang_ZP 2008-07-21
  • 打赏
  • 举报
回复
可以防止写个单等号的情况,不能说完全没用。
cacar2008 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zaodt 的回复:]

楼主的提议没错!


我看这个问题是设计 C 语言的时候,一不小心造成的。


也许那些伟大的科学家早已后悔用两个等于号了,


依我看,可以改成这样嘛:


if ( i # 0 ) ;


i # 0

相当于

i == 0
[/Quote]

不太赞同#
ke2007lin 2008-07-17
  • 打赏
  • 举报
回复
习惯问题了
vcPlayer 2008-07-17
  • 打赏
  • 举报
回复
习惯。我就忒讨厌那种把常量写前面的格式!如果经我手的话,必定给他改过来。
rageliu 2008-07-17
  • 打赏
  • 举报
回复
人家的习惯经验,分享给我们而已,又没强迫我们用,高质量代码的标准不在这里
Amuro1987218 2008-07-17
  • 打赏
  • 举报
回复
关于那本书的确有争议

比如太级语言之父在他BLOG上还写过C++之父BS说林锐错了日志

看看就好
phinew 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zxbstrong 的回复:]
常量写前面有什么问题?
[/Quote]
只是看上去别扭而已,我也不喜欢这样,不过平时写代码已经很小心了,也有鬼附身的时候用了单等号^_^
zxbstrong 2008-07-17
  • 打赏
  • 举报
回复
常量写前面有什么问题?
greatws 2008-07-17
  • 打赏
  • 举报
回复
我也觉得不科学,太不顺眼
DarknessTM 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zaodt 的回复:]

楼主的提议没错!


我看这个问题是设计 C 语言的时候,一不小心造成的。


也许那些伟大的科学家早已后悔用两个等于号了,


依我看,可以改成这样嘛:


if ( i # 0 )  ;


i # 0

相当于

i == 0
[/Quote]

直接禁止 bool的默认转换就行了……
zaodt 2008-07-17
  • 打赏
  • 举报
回复

楼主的提议没错!


我看这个问题是设计 C 语言的时候,一不小心造成的。


也许那些伟大的科学家早已后悔用两个等于号了,


依我看,可以改成这样嘛:


if ( i # 0 ) ;


i # 0

相当于

i == 0
grachel 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 DarknessTM 的回复:]
说习惯问题就算了

可是很多人一定要说这是一个好习惯,我可不认同,绝对不会是一个“好”习惯

我觉得这就是一个左撇子和右撇子的问题,有人认为用左手是一种好习惯?
[/Quote]
这个比喻貌似不是很恰当啊!
DarknessTM 2008-07-17
  • 打赏
  • 举报
回复
说习惯问题就算了

可是很多人一定要说这是一个好习惯,我可不认同,绝对不会是一个“好”习惯

我觉得这就是一个左撇子和右撇子的问题,有人认为用左手是一种好习惯?

1,650

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧