了解For的循环规则

ZDNet软件频道 时间:2004-04-19 作者:Builder.com |  我要评论()
本文关键词:c++tips
本文将介绍给大家一个关于c++的一个实用的小姐巧。
本文译自Builder.com,未经许可请勿转载 在先前标准的C++中,在for循环中的变量定义在循环外依旧可以使用,比如:

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

如果你正在使用新代码和标准编译器,新规则不会有太多的不同。但是,如果你使用遗留代码或者老的编译器,你可以按照我刚才说的方法来解决它们。


本文作者: Danny Kalev 是一个系统分析师,他有16年的工作经验,他尤其擅长在C++和面向对象的编程设计。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134