• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

一个简单的移植性的问题

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 11次 | 进入软件测试论坛讨论

领测软件测试网

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

     看下面这段码:

          //求字符串长度

        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++标准以前,我们还有很长的一段路要走,也许会很黑暗,所以不要忘记使自己的码不要依赖于某一特定实现,从而对移植带来不必要的麻烦。

 

          


文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网