万水千山只等闲

常用链接

统计

最新评论

VC6中不标准成分

根据C++的标准,在for语句中定义的变量,其作用域仅限于for语句内,但是VC6.0中的for语句不符合标准。
      for(int i = 0; i<5; ++i)
      {
      }
      //i在此处仍然有效 
可以通过如下的宏定义去掉VC6中for的不符合标准的成分:
      #define for if (0); else for              
因为加了上述的宏定义之后,前面的for语句展开为:
      if(0)
            ;
      else
            for(int i = 0; i<5; ++i)
            {
            }
      //此处已经超出else的作用域范围,在else语句中定义的i无效 
有人会说,那定义为如下定义是不是也可以呢?
      #define for if(1) for
我们使用这个宏定义展开前面的for语句看看:
      if(1)
            for(int i = 0; i<5; ++i)
            {
            }
      //此处i也同样超出了if语句的作用域,也将无效
但是,如果for语句是在if语句里的呢,例如:
      if(a>b)
            for(int i = 0; i<5; ++i)
            {
                  dosomething(i);
            }
      else
      {
            doanotherthing();//希望在a<=b时执行
      }
展开将得到:
      if(a>b)
            if(1)
                  for(int i = 0; i<5; ++i)
                  {
                        dosomething(i);
                  }
            else
            {
                  doanotherthing();//实际在a>b时也执行了
            }
另外,如果程序中错误的出现
      for(int i = 0; i < 5; ++i)
      {
      }
      else
      {
      }
通过上述的宏定义展开,也将无错。
当然前一个问题可以通过好的编码习惯避免:给所有的if,else语句都加大括号,即使只有一条语句;而后一个问题可以通过仔细检查而避免。但是介于#define for if(1) for宏定义存在的隐患,
还是使用#define for if (0); else for最好。

posted on 2012-05-07 18:27 Winnie 阅读(339) 评论(0)  编辑 收藏 引用 所属分类: C++基础知识


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理