[收藏]C++ Tips(12)--||和&&的语句执行顺序
2005-11-08 00:21
260 查看
function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
[收藏]C++ Tips(12)--||和&&的语句执行顺序
document.title="[收藏]C++ Tips(12)--||和&&的语句执行顺序 - "+document.title
[b]/*这一系列文章《C++ Tips》是公司Code Committee专家会推荐工程师看的,感觉很好,拿出来与大家共同提高。并不是知道多少会使人与人产生差别,真正的差别在于你能做到多少。
--coofucoo*/ [/b]||和&&的语句执行顺序
条件语句中的这两个“与”和“或”操作符一定要小心,它们的表现可能和你想像的不一样,这里条件语句中的有些行为需要和说一下:
express1 ││ express2
先执行表达式express1如果为“真”,express2将不被执行,express2仅在express1为“假”时才被执行。因为第一个表达式为真了,整个表达式都为真,所以没有必要再去执行第二个表达式了。
express1 && express2
先执行表达式express1如果为“假”,express2将不被执行,express2仅在express1为“真”时才被执行。因为第一个表达式为假了,整个表达式都为假了,所以没有必要再去执行第二个表达式了。于是,他并不是你所想像的所有的表达式都会去执行,这点一定要明白,不然你的程序会出现一些莫明的运行时错误。
例如,下面的程序:
if ( sum > 100 &&( ( fp=fopen( filename,"a" ) ) != NULL ) {
fprintf(fp, "Warring: it beyond one hundred/n");
......
}
fprintf( fp, " sum is %id /n", sum );
fclose( fp );
本来的意图是,如果sum > 100 ,向文件中写一条出错信息,为了方便,把两个条件判断写在一起,于是,如果sum<=100时,打开文件的操作将不会做,最后,fprintf和fclose就会发现未知的结果。再比如,如果我想判断一个字符是不是有内容,我得判断这个字符串指针是不为空(NULL)并且其内容不能为空(Empty),一个是空指针,一个是空内容。我也许会这样写:
if ( ( p != NULL ) && ( strlen(p) != 0 ))
于是,如果p为NULL,那么strlen(p)就不会被执行,于是,strlen也就不会因为一个空指针而“非法操作”或是一个“Core Dump”了。记住一点,条件语句中,并非所有的语句都会执行,当你的条件语句非常多时,这点要尤其注意。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=489029
[收藏]C++ Tips(12)--||和&&的语句执行顺序
document.title="[收藏]C++ Tips(12)--||和&&的语句执行顺序 - "+document.title
[b]/*这一系列文章《C++ Tips》是公司Code Committee专家会推荐工程师看的,感觉很好,拿出来与大家共同提高。并不是知道多少会使人与人产生差别,真正的差别在于你能做到多少。
--coofucoo*/ [/b]||和&&的语句执行顺序
条件语句中的这两个“与”和“或”操作符一定要小心,它们的表现可能和你想像的不一样,这里条件语句中的有些行为需要和说一下:
express1 ││ express2
先执行表达式express1如果为“真”,express2将不被执行,express2仅在express1为“假”时才被执行。因为第一个表达式为真了,整个表达式都为真,所以没有必要再去执行第二个表达式了。
express1 && express2
先执行表达式express1如果为“假”,express2将不被执行,express2仅在express1为“真”时才被执行。因为第一个表达式为假了,整个表达式都为假了,所以没有必要再去执行第二个表达式了。于是,他并不是你所想像的所有的表达式都会去执行,这点一定要明白,不然你的程序会出现一些莫明的运行时错误。
例如,下面的程序:
if ( sum > 100 &&( ( fp=fopen( filename,"a" ) ) != NULL ) {
fprintf(fp, "Warring: it beyond one hundred/n");
......
}
fprintf( fp, " sum is %id /n", sum );
fclose( fp );
本来的意图是,如果sum > 100 ,向文件中写一条出错信息,为了方便,把两个条件判断写在一起,于是,如果sum<=100时,打开文件的操作将不会做,最后,fprintf和fclose就会发现未知的结果。再比如,如果我想判断一个字符是不是有内容,我得判断这个字符串指针是不为空(NULL)并且其内容不能为空(Empty),一个是空指针,一个是空内容。我也许会这样写:
if ( ( p != NULL ) && ( strlen(p) != 0 ))
于是,如果p为NULL,那么strlen(p)就不会被执行,于是,strlen也就不会因为一个空指针而“非法操作”或是一个“Core Dump”了。记住一点,条件语句中,并非所有的语句都会执行,当你的条件语句非常多时,这点要尤其注意。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=489029
相关文章推荐
- [收藏]C++ Tips(12)--||和&&的语句执行顺序
- &&和|| 在执行语句时的差别
- RuntimeException的特殊情况&&[C++] 有人会在程序中try catch吗?&&什么样的问题需要用try catch语句执行
- &&、()、||决定linux命令的执行顺序
- C++关于多个连续流插入符&lt;&lt;中执行的顺序问题
- 'AjaxPro'未定义错误的原因&javascript顺序执行&AjaxPro机制
- Linux命令执行顺序— ||和&&和; 比较
- 'AjaxPro'未定义错误的原因&javascript顺序执行&AjaxPro机制
- Linux命令执行顺序— ||和&&和;
- C/C++拾遗录--for循环中的三语句执行顺序
- &&、()、||决定linux命令的执行顺序
- SQL server中的SELECTt查询语句执行顺序
- Lua里的"switch-case"语句
- SQL查询语句各部分的执行顺序
- vc6.0执行导入文件或打开时,出“"0x5003eaed"指令引用的"0x00000000"内存”
- <C/C++ 版> 设计模式 学习之 工厂模式 <1>
- "将截断字符串或二进制数据。语句已终止。"
- <C++>内存存储区域划分
- MySQL——sql语句的执行顺序
- 顺序栈基于类模板的设计(C++ 数据…