CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

??作用域的疑问

楼主minijazz(随性而发)2003-06-03 21:58:48 在 C/C++ / C语言 提问

#include   <iostream>  
  using   namespace   std;  
   
  void   main()  
  {        
  int   arraysize;  
  int   *array;  
  cout<<"Please   input   a   number   of   array   elements:\n";  
  cin>>arraysize;  
  if((array=new   int[arraysize])==NULL)  
  {  
  cout<<"Can't   allocate   more   memory,terminating.\n";  
  return;  
  }  
  for(int   count=0;count<arraysize;count++)     //count   redefinition  
  {  
  array[count]=count*2;  
  }  
  for(int   count=0;count<arraysize;count++)             //error  
  {  
  cout<<array[count]<<"   ";  
  }  
  cout<<endl;  
  delete[]array;  
  }  
  不是说for括号中的变量作用域到其后第一个“}”就结束了吗?  
  这里为什么会有冲突:count   redefinition  
  沏好茶等您来…… 问题点数:80、回复次数:12Top

1 楼zdk2116()回复于 2003-06-03 22:01:39 得分 5

是这样的,换一个变量把Top

2 楼minijazz(随性而发)回复于 2003-06-03 22:11:54 得分 0

只有换掉变量吗?  
  书上说可以啊,但在VC上通不过Top

3 楼yeyuboy(海绵)回复于 2003-06-03 22:13:01 得分 5

标准c++语法,认为这不算是重定义,但一些具体的c++编译器,并不照章办事,建议换一个编译器,如果你太不愿意换,你只好避开啦。Top

4 楼xorong(勤劳与智慧)回复于 2003-06-03 22:41:55 得分 5

对,不同编译器的语法检查不一样Top

5 楼micropentium6(小笨|曾经的美好)回复于 2003-06-03 22:46:50 得分 5

这的确不是重复定义,  
  你使用的肯定是VC6.0,因为只有这种编译器在这种情况下会报错!  
   
  不过好象VC7.0已经可以顺利编译你的代码了:)Top

6 楼hpho()回复于 2003-06-03 22:59:00 得分 30

在文件头部加  
  #define   for   if(1)   for  
  就可以了Top

7 楼steedhorse(晨星)回复于 2003-06-03 23:01:21 得分 5

VC7真的可以了吗?呵呵,祝贺微软。Top

8 楼rainbow1332(彩虹)回复于 2003-06-03 23:28:30 得分 1

我也有同样的情况!!!!!!!!!!Top

9 楼minijazz(随性而发)回复于 2003-06-04 10:57:40 得分 0

#define   for   if(1)   for  
  的确可以  
  能解释一下吗?Top

10 楼Solmyr_biti(Muxia)回复于 2003-06-04 11:09:26 得分 10

因为vc6.0在for的循环外边进行了count的定义。  
  如果使用了if(1),count的作用域保证在if里面  
  其实,c,c++的编程很依赖于编译器,很少考虑移植,你就按照vc6的要求做吧  
  当然,换7.0更好。Top

11 楼windbells(风铃)回复于 2003-06-04 12:29:38 得分 10

在C++早些版本中,如TC++3.0,允许for   语句头中声明的变量的作用域延伸至包含for的最小语句块,后来的ANSI   C++标准规定,for语句头中声明的变量之作用域只在该for语句中,但有些编译器仍保留另一种意义的选择,如BORLAND   C++5.0中,可以选择for中声明的作用域范围。在VC中,还延续了早期的选择。  
   
  如果想解决问题的话,一种是替换变量名,另一种方法是把语句块的整体作用域范围缩小,例如改为  
   
  #include   <iostream>  
  using   namespace   std;  
   
  void   main()  
  {        
  int   arraysize;  
  int   *array;  
  cout<<"Please   input   a   number   of   array   elements:\n";  
  cin>>arraysize;  
  if((array=new   int[arraysize])==NULL)  
  {  
  cout<<"Can't   allocate   more   memory,terminating.\n";  
  return;  
  }  
   
                    {  
          for(int   count=0;count<arraysize;count++)     //count   redefinition  
        {  
  array[count]=count*2;  
        }  
                    }  
  for(int   count=0;count<arraysize;count++)             //error  
  {  
  cout<<array[count]<<"   ";  
  }  
  cout<<endl;  
  delete[]array;  
  }  
   
  这样编译出来的二进制代码没有任何的不同,但是变量名又不会冲突  
  Top

12 楼shanweibing(小菜鸟)回复于 2003-06-04 12:49:54 得分 4

我也遇到过这个问题,我认为还是避开好了。Top

相关问题

  • 函数原型作用域的疑问
  • C++作用域的几个不清晰的疑问
  • 类作用域???
  • 作用域问题
  • 作用域分辨
  • 变量作用域??
  • 过程的作用域?
  • 指针作用域问题
  • 关于css的作用域
  • 变量的作用域如何设置?

关键词

  • null
  • arraysize
  • cout
  • array
  • usingnamespace std
  • void main

得分解答快速导航

  • 帖主:minijazz
  • zdk2116
  • yeyuboy
  • xorong
  • micropentium6
  • hpho
  • steedhorse
  • rainbow1332
  • Solmyr_biti
  • windbells
  • shanweibing

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo