您的位置:首页 > 移动开发 > IOS开发

VC6里for中定义变量的生命周期问题的解决方案

2009-05-02 09:03 323 查看
按照C++标准,下面这段代码是合法的:
    for(int i=0;i<5;i++);
    for(int i=0;i<4;i++);
但是很遗憾,在VC6里编译通不过,错误提示是重复定义了i。
为了让VC++ 6.0的for语句看起来符合C++标准,你可以这样做:
   #define for if (0); else for
并且由于编译器的优化,Release版本不会增加任何额外的开销。可能很多朋友跟我一开始一样,觉得直接
#define for if (1) for 不是更好么?那么下面这段代码将解释一切:
  if (xxx)
      for (int i = 0; i < 5; ++i)
          func1();
   else
       func2();
 
进行宏代码展开后,成为:
 
   if (xxx)
       if (1)
           for (int i = 0; i < 5; ++i)
               func1();
       else//问题就在这里了
           func2();

      每次输入#define for  if(0);  else  for岂不烦死,至少像我这样的懒人绝对受不了。我给VC动一下小小的手术。
打开iostream(还有iostream.h,cstdio,stdio.h)头文件,加入代码:
#ifndef  for
#define  for if(0);else for
#endif
/////////////////////////

HOHO,改造完成,
    for(int i=0;i<5;i++);
    for(int i=0;i<4;i++);
编译通过。
网上有人说此宏定义对复杂情况可能不行,我还没有发现这种情况,如果有哪位朋友发现了,告知小弟一声,先谢了。
/////////////////////////////////////////////////////////
附肖老师的意见和方法:
原则上,不允许for里面声明变量。
对于临时变量,用大括号开新栈,比如:
void func(void)
{
    ...
   {
      int i=0;
      for(i=0;i<n;i++)
      ...
   }
}
这个i就被显式定为中间大括号内有效。
/////////////////////////////////////////////////////
感谢:
Google  该宏定义的发明者 肖舸老师 邓嘉兄
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐