VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
一个简单的移植性的问题

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

     看下面这段码:

          //求字符串长度

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

 

          




相关文章

相关软件