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 该宏定义的发明者 肖舸老师 邓嘉兄
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 该宏定义的发明者 肖舸老师 邓嘉兄
相关文章推荐
- for 中变量生命周期问题
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- vc6中for语句定义的变量的作用域超出for循环的解决办法
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- 解决VC6和VC2008的for循环变量作用域不同问题的一个方法
- vc6.0中for语句变量重定义问题解决办法
- vc6中for语句定义的变量的作用域超出for循环的解决办法
- java书写规范问题,for、while、do while{}后面不能直接定义变量或生成对象(在没有大括号的情况下)
- c++中switch case 中关于变量定义问题
- 本机 MSDN Sorry, no topics were found for the selected link 问题,及临时解决方案 2008-9-6
- javascript定义变量和优先级的问题
- 首次发布App,In-App Purchase 无法submit for review 问题的解决方案
- Delphi中创建类的实例与定义一个变量引出的问题
- shell定义带变量的模板,直接修改变量,用这种方法再也不用担心正则匹配不准的问题了
- JavaScript定义变量和变量优先级问题探讨
- 定义变量的注意问题
- 关于方法内定义的类引用局部变量需要将变量设置final的问题
- Mac电脑下myeclipse不能识别系统环境变量的问题终极解决方案
- Debug JDK source 无法查看局部变量的问题解决方案
- MYSQL问题解决方案:Access denied for user 'root'@'localhost' (using password:YES)