当前位置: 首页 > news >正文

网站建设概算自己做的网站怎么传到服务器

网站建设概算,自己做的网站怎么传到服务器,佛山市网站建设分站哪家好,程序员的就业前景要了解调试程序的最好方法#xff0c;首先要分析一下调试过程的三个要素#xff1a;应该用什么工具调试一个程序?用什么办法才能找出程序中的错误?怎样才能从一开始就避免错误?应该用什么工具调试一个程序?有经验的程序员会使用许多工具来帮助调试程序#xff0c;包括一…要了解调试程序的最好方法首先要分析一下调试过程的三个要素应该用什么工具调试一个程序?用什么办法才能找出程序中的错误?怎样才能从一开始就避免错误?应该用什么工具调试一个程序?有经验的程序员会使用许多工具来帮助调试程序包括一组调试程序和一些lint”程序当然编译程序本身也是一种调试工具。在检查程序中的逻辑错误时调试程序是特别有用的因此许多程序员都把调试程序作为基本的调试工具。一般来说调试程序能帮助程序员完成以下工作(1)观察程序的运行情况仅这项功能就使一个典型的调试程序具备了不可估量的价值。即使你花了几个月的时间精心编写了一个程序你也不一定完全清楚这个程序每一步的运行情况。如果程序员忘记了某些if语句、函数调用或分支程序可能会导致某些程序段被跳过或执行而这种结果并不是程序员所期望的。不管怎样在程序的执行过程中尤其是当程序有异常表现时如果程序员能随时查看当前被执行的是那几行代码那么他就能很好地了解程序正在做什么以及错误发生在什么地方。(2)设置断点通过设置断点可以使程序在执行到某一点时暂时停住。当你知道错误发生在程序的哪一部分时这种方法是特别有用的。你可以把断点设置在有问题的程序段的前面、中间或后面。当程序执行到断点时就会暂时停住此时你可以检查所有局部变量、参数和全局变量的值。如果一切正常可以继续执行程序直到遇到另一个断点或者直到引起问题的原因暴露出来。(3)设置监视程序员可以通过调试程序监视一个变量即连续地监视一个变量的值或内容。如果你清楚一个变量的取值范围或有效内容那么通过这种方法就能很快地找出错误的原因。此外你可以让调试程序替你监视变量并且在某个变量超出预先定义的取值范围或某个条件满足时使程序暂停执行。如果你知道变量的所有行为那么这么做是很方便的。好的调试程序通常还提供一些其它功能来简化调试工作。然而调试程序并不是唯一的调试工具lint程序和编译程序本身也能提供很有价值的手段来分析程序的运行情况。注意lint程序能分辨数百种常见的编程错误并且能报告这些错误发生在程序的哪一部分。尽管其中有一些并不是真正的错误但大部分还是有价值的。lint程序和编译程序所提供的一种典型功能是编译时检查(compile—time checks)这种功能是调试程序所不具备的。当用这些工具编译你的程序时它们会找出程序中有问题的程序段可能产生意想不到的效果的程序段以及常见的错误。下面将分析几个这种检查方式的应用例子相信对你会有所帮助。等于运算符的误用 编译时检查有助于发现等于运算符的误用。请看下述程序段void foo(int aint b){if ( a b ){/ * some code here * /}}这种类型的错误一般很难发现!程序并没有比较两个变量而是把b的值赋给了a并且在b不为零的条件下执行if体。一般来说这并不是程序员所希望的(尽管有可能)。这样一来不仅有关的程序段将被执行错误的次数并且在以后用到变量a时其值也是错误的。未初始化的变量 编译时检查有助于发现未初始化的变量。请看下面的函数void average ( float ar[], int size ){float total;int a;for( a 0;asize; a){totalar[a];}printf( %f\n, total /  (float) size );}这里的问题是变量total没有被初始化因此它很可能是一个随机的无用的数。数组所有元素的值的和将与这个随机数的值相加(这部分程序是正确的)然后输出包括这个随机数在内的一组数的平均值。变量的隐式类型转换 在有些情况下C语言会自动将一种类型的变量转换为另一种类型。这可能是一件好事(程序员不用再做这项工作)但是也可能会产生意想不到的效果。把指针类型隐式转换成整型恐怕是最糟糕的隐式类型转换。void sort( int ar[],int size ){/* code to sort goes here * /}int main(){int arrgy[10];sort(  10, array );}上述程序显然不是程序员所期望的虽然它的实际运行结果难以预测但无疑是灾难性的。用什么办法才能找出程序中的错误? 在调试程序的过程中程序员应该记住以下几种技巧先调试程序中较小的组成部分然后调试较大的组成部分如果你的程序编写得很好那么它将包含一些较小的组成部分最好先证实程序的这些部分是正确的。尽管程序中的错误并不一定发生在这些部分中但是先调试它们有助于你理解程序的总体结构并且证实程序的哪些部分不存在错误。进一步地当你调试程序中较大的组成部分时你就可以确信那些较小的组成部分是正常工作的。彻底调试好程序的一个组成部分后再调试下一个组成部分这一点非常重要。如果证实了程序的一个组成部分是正确的不仅能缩小可能存在错误的范围而且程序的其它组成部分就能安全地使用这部分程序了。这里应用了一种很好的经验性原则简单地说就是调试一段代码的难度与这段代码长度的平方成正比因此调试一段20行的代码比调试一段10行的代码要难4倍。因此在调试过程中每次只把精力集中在一小段代码上是很有帮助的。当然这仅仅是一个总的原则具体使用时还要视具体情况而定。连续地观察程序流(flow)和数据的变化这一点也很重要!如果你小心仔细地设计和编写程序那么通过监视程序的输出你就能准确地知道正在执行的是哪部分代码以及各个变量的内容都是什么。当然如果程序表现不正常你就无法做到这一点。为了做到这一点通常只能借助于调试程序或者在程序中加入大量的print语句来观察控制流和重要变量的内容。始终打开编译程序警告选项  并试图消除所有警告在开发程序的过程中你自始至终都要做到这一点否则你就会面临一项十分繁重的工作。尽管许多程序员认为消除编译程序警告是一项繁琐的工作但它是很有价值的。编译程序给出警告的大部分代码至少都是有问题的因此用一些时间把它们变成正确的代码是值得的而且通过消除这些警告你往往会找到程序中真正发生错误的地方。准确地缩小存在错误的范围如果你能一下子确定存在错误的那部分程序并在其中找到错误那就会节省许多调试时间并且你能成为一个收入相当高的专业调试员。但事实上我们并不能总是一下子就命中要害因此通常的做法是逐步缩小可能存在错误的程序范围并通过这种过程找出真正存在错误的那部分程序。不管错误是多么难于发现这种做法总是有效的。当你找到这部分程序后就可以把所有的调试工作集中到这部分程序上了。不言而喻准确地缩小范围是很重要的否则最终集中精力调试的那部分程序很可能是完全正确的。如何从一开始就避免错误? 有这样一句谚语——“防患于未然”它的意思是避免问题的出现比出现问题后再想办法弥补要好得多。这在计算机编程中也是千真万确的!在编写程序时一个经验丰富的程序员所花的时间和精力要比一个缺乏经验的程序员多得但正是这种耐心和严谨的编程风格使经验丰富的程序员往往只需花很少的时间来调试程序而且如果此后程序要解决某个问题或做某种改动他便能很快地修正错误并加入相应的代码。相反对于一个粗制滥造的程序即使它总的来说还算正确那么改动它或者修正其中一个很快就暴露出来的错误都会是一场恶梦。一般来说按结构化程序设计原则编写的程序是易于调试和修改的下面将介绍其中的一些原则。程序中应有足够的注释有些程序员认为注释程序是一项繁琐的工作但即使你从来没想过让别人来读你的程序你也应该在程序中加入足够的注释因为即使你现在认为清楚明了的语句在几个月以后往往也会变得晦涩难懂。这并不是说注释越多越好过多的注释有时反而会混淆代码的原意。但是在每个函数中以及在执行重要功能或并非一目了然的代码前加上几行注释是必要的。下面就是一段注释得较好的代码/*  *   Compute an integer factorial value using recursion.*   Input   an integer number.*   Output  : another integer*   Side effects : may blow up stack if input value is  * Huge **/int factorial ( int number){if ( number 1)return 1;  /* The factorial of one is one; QED * /elsereturn n * factorial( n - 1 );/ * The magic! This is possible because the factorial of anumber is the number itself times the factorial  of thenumber minus one.  Neat!  * /}函数应当简洁按照前文中曾提到的这样一条原则——调试一段代码的难度和这段代码长度的平方成正比——函数编写得简洁无疑是有益的。但是需要补充的是如果一个函数很简洁你就应该多花一点时间去仔细地分析和检查它以确保它准确无误。此后你可以继续编写程序的其余部分并且可以对刚才编写的函数的正确性充满信心你再也不需要检查它了。对于一段又长又复杂的例程你往往是不会有这样的信心的。编写短小简洁的函数的另一个好处是在编写了一个短小的函数之后在程序的其它部分就可以使用这个函数了。例如如果你在编写一个财务处理程序那么你在程序的不同部分可能都需要按季、按月、按周或者按一月中的某一天等方式来计算利息。如果按非结构化原则编写程序那么在计算利息的每一处都需要一段独立的代码这些重复的代码将使程序变得冗长而难读。然而你可以把这些任务的实现简化为下面这样的一个函数/**    ComDllte what the real rate of interest would be*     for a given flat interest rate, divided into N segments*/double Compute Interest( double Rate, int Segments ){int  a;double Result 1.0;Rate / (double) Segments;for( a 0; a Segments  ; a )Result * Rate;return Result;}在编写了上述函数之后你就可以在计算利息的每一处调用这个函数了。这样一来你不仅能有效地消除每一段复制的代码中的错误而且大大缩短了程序的长度简化了程序的结构。这种技术往往还会使程序中的其它错误更容易被发现。当你习惯了用这种方法把程序分解为可控制的模块后你就会发现它还有更多的妙用。程序流应该清晰避免使用goto语句和其它跳转语句这条原则在计算机技术领域内已被广泛接受但在某些圈子中对此还很有争议。然而人们也一致认为那些通过少数语句使程序流无条件地跳过部分代码的程序调试起来要容易得多因为这样的程序通常更加清晰易懂。许多程序员不知道如何用结构化的程序结构来代替那些“非结构化的跳转”下面的一些例子说明了应该如何完成这项工作for( a 0; a100s a){Func1( a );if (a  2 ) continue;Func2( a );}当a等于2时这段程序就通过continue语句跳过循环中的某余部分。它可以被改写成如下的形式for( a 0; a100; a){Func1 (a);if (a !2 )Func2(a) ;}这段程序更易于调试因为花括号内的代码清楚地显示了应该执行和不应该执行什么。那么它是怎样使你的代码更易于修改和调试的呢?假设现在要加入一些在每次循环的最后都要被执行的代码在第一个例子中如果你注意到了continue语句你就不得不对这段程序做复杂的修改(不妨试一下因为这并非是显而易见的!)如果你没有注意到continue语句那么你恐怕就要犯一个难以发现的错误了。在第二个例子中要做的修改很简单你只需把新的代码加到循环体的末尾。当你使用break语句时可能会发生另外一种错误。假设你编写了下面这样一段程序for (a 0) a100;  a){if (Func1 (a) 2 )break;Func2 (a)  ;}假设函数Funcl()的返回值永远不会等于2上述循环就会从1进行到100反之循环在到达100以前就会结束。如果你要在循环体中加入代码看到这样的循环体你很可能就会认为它确实能从0循环到99而这种假设很可能会使你犯一个危险的错误。另一种危险可能来自对a值的使用因为当循环结束后a的值并不一定就是100。c语言能帮助你解决这样的问题你可以按如下形式编写这个for循环for(aOa100Func1(a)!2a)上述循环清楚地告诉程序员“从0循环到99但一旦Func1()等于2就停止循环”。因为整个退出条件非常清楚所以程序员此后就很难犯前面提到的那些错误了。函数名和变量名应具有描述性使用具有描述性的函数和变量名能更清楚地表达代码的意思——并且在某种程度上这本身就是一种注释。以下几个例子就是最好的说明ypi-c和YearlySumPrincipalInterest-Charges哪一个更清楚呢?p*(lo)和pageList[offset]哪一个更清楚呢?
http://www.zqtcl.cn/news/779930/

相关文章:

  • 十大免费货源网站免费版本厦门建网站多少钱
  • 网站建设投标书范本深圳网页设计培训多少钱
  • 动态ip可以做网站北京万户网络
  • 网址大全免费网站中国建设银行驻莫斯科网站
  • 网站建设 教材 推荐网站导入
  • 网站备案扫描智能软件开发就业前景
  • 快速网站建设费用口碑营销图片
  • wordpress地址和站点地址错天津seo诊断
  • 张云网站建设做谷歌推广比较好的公司
  • 电子商务网站建设与管理的论文题目智能自助建站系统源码
  • 个人网站建设价格网站做视频转流量
  • 点网站出图片怎么做深圳市中心在哪
  • 企业网站建设58同城网站优化排名软件哪些最好
  • 最专业企业营销型网站建设企业宣传海报设计制作
  • 石家庄建站公司软件开发岗位介绍
  • 网站开发知识视频教程公司网站总感觉少点什么找什么人做
  • 做网站ps建立多大的画布网站排名监控工具
  • 烟台网站开发网站建设横幅标语
  • 微信公众号素材网站在线资源链接
  • 网站开发地图板块浮动国际重大新闻事件10条
  • 成品网站app开发wordpress宽度调整
  • 小型网站建设需要多少钱网站发布内容是否过滤
  • 网站如何推广运营漳平网站编辑价格
  • 海洋优质的网站建设企业微信下载官方网站
  • 十大免费ae模板网站wordpress 远程设置
  • 青岛网站的优化云南抖音推广
  • 做中英文版的网站需要注意什么如何偷别人dedecms网站的模板
  • 免费微网站制作最近三天发生的重要新闻
  • 网站优化网络推广seo编程软件python
  • 建设部网站官网合同免费申请网站永久