对Visual C++中for语句中初始化部分声明的变量的作用域存在的问题
来源:互联网 发布:国密算法sm1 编辑:程序博客网 时间:2024/05/29 10:23
本贴转自:http://hi.baidu.com/froms/blog/item/4a8791dd44821d335882dd17.html
在C或C++中对于在for语句中的初始化部分声明的变量到底具有怎样的作用域,在“INTERNATIONAL STANDARD ISO/IEC 14882(ISO/IEC 14882国际标准)”中是这样定义的:(注:ISO/IEC 14882国际标准的内容是Programming languages — C++,即C++语言标准,包括1998-09-01的第一版和2003-10-15的第二版)该贴原出处为:http://hi.baidu.com/froms
6.5.3 The for statement(for语句)
……该贴原出处为:http://hi.baidu.com/froms
3 If the for-init-statement is a declaration, the scope of the name(s) declared extends to the end of the forstatement.(如果for语句的初始化部分是一个声明语句,则这个变量的作用域为从其声明开始到该for语句结束)该贴原出处为:http://hi.baidu.com/froms
[Example:
int i = 42;
int a[10];
for (int i = 0; i < 10; i++)该贴原出处为:http://hi.baidu.com/froms
a[i] = i;
int j = i; // j = 42
—end example]该贴原出处为:http://hi.baidu.com/froms
……
对于以上给出的例子可以很明显的说明for语句中在初始化部分声明的变量的作用域:如果其作用域是从变量声明开始到该for语句所在的作用域的结束部分的话,那么这个例子将会发生编译错误,因为变量i被重复定义了;而如果按标准中所说的那样是从其声明开始到该for语句结束的话,那么for循环开始时,例子开头处声明的i失去了作用域,for循环初始化部分声明的i获得作用域,当结束for循环后,在for中声明的i应该为10,而由于其作用域的限制,此时i被销毁,例子开头处声明的i被从新赋予作用域,于是就有了后面的j=42。该贴原出处为:http://hi.baidu.com/froms
同样的问题发生在while、do … while、switch语句中。
但是Microsoft Visual C++ 1.0却早在1993年就已经诞生,比1998年才颁布的C++语言国际标准早了5年,尽管Microsoft一再推出新版本,同时在1998年推出Microsoft Visual C++ 6.0,但对于以上所描述的for语句中的初始化部分声明的变量的作用域,Microsoft却采用了不同于国际标准的做法,即是从变量声明开始到该for语句所在的作用域的结束部分,以至于对以上例子,Visual C++竟会报出“error C2374: 'i' : redefinition; multiple initialization(变量i重定义)”的错误,实属不该啊。该贴原出处为:http://hi.baidu.com/froms
- 对Visual C++中for语句中初始化部分声明的变量的作用域存在的问题
- for初始语句中声明变量的作用域问题
- c++,在VS2008中讨论for{}声明变量的作用域。
- 这个关于c中break的跳转位置以及声明变量的作用域的问题。
- C++ for语句中定义变量的作用域(备忘)
- Java for语句中定义变量的作用域(备忘)
- C语言中变量的初始化问题
- C程序中,变量的初始化问题
- vc6中for语句定义的变量的作用域超出for循环的解决办法
- vc6中for语句定义的变量的作用域超出for循环的解决办法
- 关于C/C++中switch语句case中变量不能初始化赋值的问题
- for循环中声明变量的一个问题回顾
- switch语句中case跳过变量初始化的问题
- javascript中未声明自定义变量的作用域
- js中变量的函数作用域和声明提前
- Shell编程中变量的声明、引用及作用域
- java中声明变量和初始化变量的相关感想
- Java变量的声明、初始化和作用域
- 为VS2008默认模板添加版权信息
- 这几天浙江金华一带的天气好热!
- PowerDesign DBMS 设置
- 麻痹国务院
- 准备转向ubuntu下做Java开发
- 对Visual C++中for语句中初始化部分声明的变量的作用域存在的问题
- 给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。求那个出现了奇数次的数。1<=N<=1000,N肯定是奇数。所有出现的整数都不超过1000。
- gcc/g++ 命令的常用选项
- c语言回调函数
- 希望有朋友一起研究网页的数据采集
- Linux 访问 Windows 共享文件
- 路由器中的端口影射
- GridView显示数据库图片
- imagecapture