for (int n=0; n<MAX; ++n)
{
//..do something
}
++n; //OK in pre-standard C++; illegal in ISO
C++
但是,在ISO C++中,for循环的变量只能被它内部自己使用。这个改变是很有意义的,它影响了新的和旧的代码。我将会介绍给你几种移植的技术让你适应这个改变
当你在标准编译器上运行遗留代码,这些遗留代码将被打破。但是,代码需要彻底的测试并在很多时候出现一连串的错误和编译错误
如果你不希望招致蠕虫,又想更新你的编译器,检查是否有一个选项可以恢复到以前的标准。如果可以,打开这个选项并在代码中明朗这个作用以便让以后的程序员知道正确的编译这个代码。
如果你不想这么做,你有一个其他的选择:将变量的定义移到循环的外面:
int n=0; //originally was inside
the for loop
for (/*n was here*/; n<MAX; ++n)
{
//..do something
}
int x=n; //OK
你需要经常对一些改变做一个描述性的注释
这个规则同样会影响到新代码,比如,假设你在一个依然有以前标准性能的编译器中编译新的代码。
要确定for循环语句变量不能被循环外部访问,你可以将整个循环使用一个括号。
{//restrict for-loop variables'
scope
for (int n=0; n<MAX; ++n)
{
//..do something
}
}//restrict for-loop variables' scope
在有条件编译器的帮助下,你可以在需要的时候使用macro插入括号
#if defined(OLD_FOR_SCOPING)
#define OPEN_FOR_GUARD {
#define CLOSE_FOR_GUARD }
#else
#define OPEN_FOR_GUARD
#define CLOSE_FOR_GUARD
#endif
OPEN_FOR_GUARD
for (int n=0; n<MAX; ++n)
{
//..do something
}
CLOSE_FOR_GUARD
如果你正在使用新代码和标准编译器,新规则不会有太多的不同。但是,如果你使用遗留代码或者老的编译器,你可以按照我刚才说的方法来解决它们。