C++的变量作用域

简介:

这几天帮师兄做仿真,由于特别急,代码写的很乱,我一半写代码都用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,如需转载请自行联系原作者

相关文章
|
29天前
|
存储 C++ 容器
学会在 C++ 中使用变量:从定义到实践
C++中的变量是数据容器,包括`int`、`double`、`char`、`string`和`bool`等类型。声明变量时指定类型和名称,如`int myNum = 15;`。`cout`与`&lt;&lt;`用于显示变量值。常量用`const`声明,值不可变。变量名应唯一,遵循特定命名规则,常量声明时需立即赋值。
113 1
|
1月前
|
编译器 C++
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
17 0
|
1月前
|
存储 C++
C++系列三:变量、常量
C++系列三:变量、常量
|
1月前
|
存储 C++
C++的变量和常量
C++的变量和常量
13 1
|
1月前
|
程序员 C语言 C++
C++入门(头文件,命名空间,作用域,输入输出流,引用,缺省参数,函数重载)
C++入门(头文件,命名空间,作用域,输入输出流,引用,缺省参数,函数重载)
|
1月前
|
编译器 C++
c++关于命名空间内变量和函数及全局变量的使用和作用域
c++关于命名空间内变量和函数及全局变量的使用和作用域
33 1
|
15天前
|
存储 程序员 编译器
C++注释、变量、常量、关键字、标识符、输入输出
C++注释、变量、常量、关键字、标识符、输入输出
|
27天前
|
存储 编译器 C语言
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
|
29天前
|
安全 算法 编译器
【C++ 基础 ()和{}括号】深入探索 C++ 的变量初始化:括号和大括号的奥秘
【C++ 基础 ()和{}括号】深入探索 C++ 的变量初始化:括号和大括号的奥秘
39 0
|
29天前
|
算法 编译器 C++
【C++ 函数 基本教程 第二篇 】深度剖析C++:作用域与函数查找机制
【C++ 函数 基本教程 第二篇 】深度剖析C++:作用域与函数查找机制
32 0

热门文章

最新文章