一个简单的移植性的问题

类别:VC语言 点击:0 评论:0 推荐:

      第一次发表文章,本人水平极其一般,所以这里写的可能没有多大价值,希望不会浪费各位的时间,如果是的话,我表示歉意。

     看下面这段码:

          //求字符串长度

        int StrLen(const char str[])
           {
               for(int i=0;str[i]!='\0';++i)
                    {
                          continue;
                     }
                return i;
           }

     这段代码在vc6.0环境下编译没有问题,可是在dev-c++下编译却是错误的,编译器提示为using obsolete binding at 'i',意思是使用的废弃的i。

    原因很简单c++标准规定在循环内的局部变量在循环结束后,他的生命也就结束了,后续的对此变量的使用都是非法的。

    时下有的编译器实现在某些方面未能符合c++标准,vc6.0就是这样的编译器。所以上面这段不符合c++标准的码,却能够顺利地通过编译,而不会有错误。

   可以做一些简单的修改使之能够在不同的编译器下都能正确的通过编译:

 

int StrLen(const char str[])
{
    int i;
    for(i=0;str[i]!='\0';++i)
   
        continue;
   
    return i;
}

把变量i的定义声明提到循环前面就可以了。

 

      由于时下的各种编译器并不能完全的符合c++标准,所以使一些不符合c++标准的码反而能够顺利的编译,在编译器能够完全符合c++标准以前,我们还有很长的一段路要走,也许会很黑暗,所以不要忘记使自己的码不要依赖于某一特定实现,从而对移植带来不必要的麻烦。

 

          

本文地址:http://com.8s8s.com/it/it2354.htm