一个简单的移植性的问题 (转)

一个简单的移植性的问题 (转)[@more@]

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

  看下面这段码:

  //求字符串长度

   int StrLen(const char str[])
  {
  for(int i=0;str[i]!='';++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]!='';++i)
 
  continue;
 
  return i;
}

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

 

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

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992794/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992794/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值