c 陷阱与缺陷读书笔记

来源:互联网 发布:女生穷游 知乎 编辑:程序博客网 时间:2024/06/07 06:43

悬挂else问题

if(x==0)       if(y==0)error();else {z=x+y;f(&z);}


c 语言中else 始终与 同一对括号内最近的未匹配的if结合。
所以上面这段代码的实际执行是
if(x==0){if(y==0)error();else{z=x+y;f(&z);}}
而不是

if(x==0)   {   if(y==0)error();}else {z=x+y;f(&z);}}
例子:

#include <iostream>#include <string.h>using namespace std;int main(){if(3<5)    if(3<2)cout<<8<<endl;else cout<<9<<endl;return 0;} 

上面程序的输出结果是9 而不是什么也不输出。





0 0