博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++的变量作用域
阅读量:6345 次
发布时间:2019-06-22

本文共 1267 字,大约阅读时间需要 4 分钟。

这几天帮师兄做仿真,由于特别急,代码写的很乱,我一半写代码都用C语言的风格,即使编的是CPP文件。

C++中,可以随便定义变量,比C语言好用,标准的C语言是不支持for(int i = 0; i < 5; i++)的。C++中有这个特性,让我犯了一个很简单的错误,花了一天时间才把bug找出来。

为了让自己不再犯这么低级的错误,特地写一篇日志纪念一下。

一开始写了这样的代码:

 
  1. if(len == 1) 
  2.     sp[0] = 1; 
  3.     sp[1] = end; 
  4.   
  5.     for(int k = 0; k < sub[sn_index].links; k++) 
  6.         if((sub[sn_index].link[k].from == start && sub[sn_index].link[k].to == end)|| 
  7.            (sub[sn_index].link[k].from == end && sub[sn_index].link[k].to == start)) 
  8.             break
  9.     if(k == sub[sn_index].links) 
  10.         return 0; 
  11.    
  12.     if(sub_req[req_index][subreq_index].link[index].bw > s2v_l[sn_index][k].rest_bw) 
  13.            return 0;     
  14.     return 1; 

编译错误,下面的k的作用域有问题,然后我增加了int k

 
  1. if(len == 1) 
  2.     sp[0] = 1; 
  3.     sp[1] = end; 
  4.     int k; 
  5.     for(int k = 0; k < sub[sn_index].links; k++) 
  6.         if((sub[sn_index].link[k].from == start && sub[sn_index].link[k].to == end)|| 
  7.            (sub[sn_index].link[k].from == end && sub[sn_index].link[k].to == start)) 
  8.             break
  9.     if(k == sub[sn_index].links) 
  10.         return 0; 
  11.     if(sub_req[req_index][subreq_index].link[index].bw > s2v_l[sn_index][k].rest_bw) 
  12.            return 0;     
  13.     return 1; 

编译通过了,很开心,大部分结果都对,有一部分结果老是不对,我找啊找,就是没找到原因,最后我终于找到了,C++怎么都不警告我一下呢。

但是为什么没有出现段错误呢?我把第一个k全部打印出来,结果全是0,理论上k应该是不确定的,我用的是64位Linux,换成32位的试试,果然出现段错误了,但是64位也应该出段错误啊。我换了一台64位的机器,打印第一个k,前边很多都是0,后来出来一个大数,段错误了。

本文转自nxlhero 51CTO博客,原文链接:http://blog.51cto.com/nxlhero/731123,如需转载请自行联系原作者

你可能感兴趣的文章
net之socket的通信
查看>>
Java并发编程基础-线程简介
查看>>
Arm发布Cortex-A76AE自动驾驶芯片架构,宣示车载系统市场主权
查看>>
FreeBSD ports中make可带有的参数(转)
查看>>
Hibernate入门教程
查看>>
【转载】解决windows服务器上定时任务执行时报0x1错误,但是手动执行顺利完成...
查看>>
Java支付宝扫码支付[新]
查看>>
SpringMVC 拦截器 筛选
查看>>
CronExpression介绍
查看>>
第十八章:MVVM(八)
查看>>
点击表头切换升降序排序方式
查看>>
“Fintech加持下,传统信贷发生革命性变化,但难说已经成功”
查看>>
Coding and Paper Letter(三十二)
查看>>
第26天,Django之include本质
查看>>
Java中静态变量和实例变量的区别
查看>>
秋名山老司机(详解)——bugku
查看>>
RED | Robot Framework集成开发环境
查看>>
Oracle 和SQL Server 中的SQL语句使用区别
查看>>
JS 中 this 关键字详解
查看>>
有关css栅格系统的故事
查看>>