老代码中未声明的变量错误该如何修改
最近因为工作需要接触了大量VC6下编写的代码,在使用VS2005或者之后的编译环境进行编译的时候,编译器大量报错,基本上都是循环体中的临时变量未声明一类的错误。
我知道VC6可以默认变量为int,但其中有一类错误是这样的:
for (int i = 0; i < 10; ++ i)
{
//do something
}
if (i > 5)
{
//do something
}
实际情况往往比这复杂,但简化的话基本就是上面这个意思。像这样的编译报错在代码中比比皆是,让我弄不明白是否需要修改,将后面的i>5部分的内容转移到循环体中去,又怕有没有什么特殊因素。
这样的问题存在的例子不是一个两个,甚至在很多别的老代码中也经常见到,让我疑惑不已。请问我应该怎样修改这里的代码才是正确的?
而且我不理解,难道VC6可以支持这样写代码?那代码执行到后面这个i>5的时候,这个i的值是多少?
[解决办法]
vc6 中无疑有许多神奇的东东~这个for中定义的变量在循环后还是有效的是最记忆深刻的~~
就是说,
for (int i = 0; i < 10; ++ i)
{
//do something
}
和
int i;
for(i = 0; i < 10; ++i)
等价。
你就应该知道代码执行到后面这个i>5的时候,这个i的值是多少了吧。。
[解决办法]
我曾经做过类似的的工程,只能一点点改,确保改成了等价的。
原因:早期的ms c/c++有很多自己的扩展,与标准不相符。而早期的程序员们恰好使用了这些扩展特性。但是后来,微软在新版本的编译器又放弃了这些扩展特性,选择与标准靠近。
教训:跟着标准走,不用扩展特性
[解决办法]
没搞懂你有啥困惑的,只不过是vc6 for 里面定义的变量实际等同在外边定义而已(实际不符合规范),也就是说
for (int i = 0; i < 10; ++ i)
{
//do something
}
实际上和
int i;
for (i = 0; i < 10; ++ i)
{
//do something
}
是等价的,就这样改就ok了