Goto(高级程式语言)

生活百科 2023-01-25 21:22生活百科www.aizhengw.cn

Goto(高级程式语言)

其中标号需要申请,在对应的过程的申请的位置写label <标号>;其中,标号必须为byte型整数。

在该段落内还需要有<标号>:表示将要转向的方向。

基本介绍

  • 中文名Goto
  • 外文名Goto

套用举例

C语言

Sample(2005MSDN上的例子)
#include <stdio.h>
int main()
{
int i, j;
for ( i = 0; i < 10; i++ )
{
printf( "Outer loop executing. i = %d\n", i );
for ( j = 0; j < 3; j++ )
{
printf( " Inner loop executing. j = %d\n", j );
if ( i == 5 )
goto stop;
}
}
/ This message does not print: /
printf( "Loop exited. i = %d\n", i );
stop: printf( "Jumped to stop. i = %d\n", i );//stop: 就是标籤
return 0;
}

Pascal语言中的Goto语句

goto <标号>;
其中标号需要申请,在对应的过程的申请的位置写label <标号>;其中,标号必须为byte型整数。
在该段落内还需要有<标号>:表示将要转向的方向。

发展历程

60年代中期以后,计算机硬体技术日益进步,计算的存贮容量、运算速度和可靠性明显提高,生产硬体的成本不断降低。计算机价格的下跌为它的广泛套用创造了极好的条件。在这种形势下,迫切要求计算机软体也能与之相适应。因而,一些开发大型软体系统的要求提了出来。软体技术的进步一直未能满足形势发展的需要,在大型软体的开发过程中出现了複杂程度高、研製周期长、正确性难以保证的三大难题。遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,出现了所谓的“软体危机”。为了克服这一危机,一方面需要对程式设计方法、程式的正确性和软体的可靠性等问题进行系列的研究;另一方面,也需要对软体的编制、测试、维护和管理的方法进行研究,从而产生了程式设计方法学。

各方看法

有害

1968年,E·W·代克斯特拉提出“GOTO语句是有害的”论点,向传统程式设计方法提出了挑战,从而引起了人们对程式设计方法讨论的普遍重视。

争论

在60年代末和70年代初,关于GOTO语句的用法的争论比较激烈。主张从高级程式语言中去掉GOTO语句的人认为,GOTO语句是对程式结构影响最大的一种有害的语句,他们的主要理由是GOTO语句使程式的静态结构和动态结构不一致,从而使程式难以理解,难以查错。去掉GOTO语句后,可直接从程式结构上反映程式运行的过程。这样,不仅使程式结构清晰,便于理解,便于查错,而且也有利于程式的正确性证明。
持反对意见的人认为,GOTO语句使用起来比较灵活,而且有些情形能提高程式的效率。若完全删去GOTO语句,有些情形反而会使程式过于複杂,增加一些不必要的计算量。

解决方法

1974年,D·E·克努斯对于GOTO语句争论作了全面公正的评述,其基本观点是不加限制地使用GOTO语句,特别是使用往回跳的GOTO语句,会使程式结构难于理解,在这种情形,应儘量避免使用GOTO语句。但在一些情况下,为了提高程式的效率,又不至于破坏程式的良好结构,有控制地使用一些GOTO语句也是必要的。用他的话来说就是“在有些情形,我主张删掉GOTO语句;在一些情形,则主张引进GOTO语句。”从此,使这场长达10年之久的争论得以平息。
后来,G·加科皮尼和C·波姆从理论上证明了任何程式都可以用顺序、分支和重複结构表示出来。这个结论表明,从高级程式语言中去掉GOTO语句并不影响高级程式语言的编程能力,而且编写的程式的结构更加清晰。

结果

在C/C++等高级程式语言中保留了goto语句,但被建议不用或少用。在一些更新的高级程式语言,如Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使 用,使程式简洁易读;儘管如此后来的c#还是支持goto语句的,goto语句一个好处就是可以保证程式存在唯一的出口,避免了过于庞大的if嵌套。

注意问题

goto语句不能跨越变数的定义向后跳转
//......
goto end;
int ix=10;
end:
ix=42;//会出现ix未定义的情形
而向前跳过已经执行的变数定义语句是合法的。因为向前跳回到一个变数定义之前,系统在撤销这个变数,然后重新创建它
//..........
begin:
int sz=get_size();
if(sz<=0) goto begin;
执行goto语句时,撤销变数sz,然后程式的控制流程跳转到带begin:标号的语句继续执行,重新创建和初始化变数sz。

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有